Merge branch 'develop' of github.com:Dolibarr/dolibarr into develop#2
This commit is contained in:
commit
3c9b6c47dd
@ -67,7 +67,7 @@ Scope is the web application (back office) and the APIs.
|
||||
|
||||
* Remote code execution (RCE)
|
||||
* Local files access and manipulation (LFI, RFI, XXE, SSRF, XSPA)
|
||||
* Code injections (HTML, JS, SQL, PHP, ...)
|
||||
* Code injections (JS, SQL, PHP). HTML are covered only for fields that are not description, notes or comments fields (where rich content is allowed on purpose).
|
||||
* Cross-Site Scripting (XSS), except from setup page of module "External web site" (allowing any content here, editable by admin user only, is accepted on purpose) and except into module "Web site" when permission to edit website content is allowed (injecting any data in this case is allowed too).
|
||||
* Cross-Site Requests Forgery (CSRF) with real security impact (when using GET URLs, CSRF are qualified only for creating, updating or deleting data from pages restricted to admin users)
|
||||
* Open redirect
|
||||
|
||||
@ -119,6 +119,7 @@ if (isModEnabled('accounting')) {
|
||||
print "<br>\n";
|
||||
print '<span class="opacitymedium">'.$langs->trans("AccountancyAreaDescIntro")."</span><br>\n";
|
||||
if ($user->hasRight('accounting', 'chartofaccount')) {
|
||||
print '<br>';
|
||||
print load_fiche_titre('<span class="fa fa-calendar-check-o"></span> '.$langs->trans("AccountancyAreaDescActionOnce"), '', '')."\n";
|
||||
print '<hr>';
|
||||
print "<br>\n";
|
||||
|
||||
@ -441,7 +441,7 @@ class Adherent extends CommonObject
|
||||
* @param string $errors_to erros to
|
||||
* @param string $moreinheader Add more html headers
|
||||
* @deprecated since V18
|
||||
* @see sendEmail
|
||||
* @see sendEmail()
|
||||
* @return int <0 if KO, >0 if OK
|
||||
*/
|
||||
public function send_an_email($text, $subject, $filename_list = array(), $mimetype_list = array(), $mimefilename_list = array(), $addr_cc = "", $addr_bcc = "", $deliveryreceipt = 0, $msgishtml = -1, $errors_to = '', $moreinheader = '')
|
||||
|
||||
@ -581,11 +581,11 @@ print '<strong>MAIN_DOCUMENT_IS_OUTSIDE_WEBROOT_SO_NOEXE_NOT_REQUIRED</strong> =
|
||||
print '<br>';
|
||||
|
||||
$examplecsprule = "frame-ancestors 'self'; img-src * data:; font-src *; default-src 'self' 'unsafe-inline' 'unsafe-eval' *.paypal.com *.stripe.com *.google.com *.googleapis.com *.google-analytics.com *.googletagmanager.com;";
|
||||
print '<strong>MAIN_SECURITY_FORCECSPRO</strong> = '.getDolGlobalString('MAIN_SECURITY_FORCECSP', '<span class="opacitymedium">'.$langs->trans("Undefined").'</span>').' <span class="opacitymedium">('.$langs->trans("Example").': "'.$examplecsprule.'")</span><br>';
|
||||
print '<strong>MAIN_SECURITY_FORCECSPRO</strong> = '.getDolGlobalString('MAIN_SECURITY_FORCECSPRO', '<span class="opacitymedium">'.$langs->trans("Undefined").'</span>').' <span class="opacitymedium">('.$langs->trans("Example").': "'.$examplecsprule.'")</span><br>';
|
||||
print '<br>';
|
||||
|
||||
$examplecsprule = "frame-ancestors 'self'; img-src * data:; font-src *; default-src 'self' 'unsafe-inline' 'unsafe-eval' *.paypal.com *.stripe.com *.google.com *.googleapis.com *.google-analytics.com *.googletagmanager.com;";
|
||||
print '<strong>MAIN_SECURITY_FORCECSP</strong> = '.getDolGlobalString('MAIN_SECURITY_FORCERP', '<span class="opacitymedium">'.$langs->trans("Undefined").'</span>').' <span class="opacitymedium">('.$langs->trans("Example").': "'.$examplecsprule.'")</span><br>';
|
||||
print '<strong>MAIN_SECURITY_FORCECSP</strong> = '.getDolGlobalString('MAIN_SECURITY_FORCECSP', '<span class="opacitymedium">'.$langs->trans("Undefined").'</span>').' <span class="opacitymedium">('.$langs->trans("Example").': "'.$examplecsprule.'")</span><br>';
|
||||
print '<br>';
|
||||
|
||||
print '<strong>MAIN_SECURITY_FORCERP</strong> = '.getDolGlobalString('MAIN_SECURITY_FORCERP', '<span class="opacitymedium">'.$langs->trans("Undefined").'</span>').' <span class="opacitymedium">('.$langs->trans("Recommended").': '.$langs->trans("Undefined").' '.$langs->trans("or")." \"same-origin\" so browser doesn't send any referrer when going into another web site domain)</span><br>";
|
||||
|
||||
@ -113,15 +113,15 @@ class DolibarrApiAccess implements iAuthenticate
|
||||
$sql = "SELECT u.login, u.datec, u.api_key, ";
|
||||
$sql .= " u.tms as date_modification, u.entity";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."user as u";
|
||||
$sql .= " WHERE u.api_key = '".$this->db->escape($api_key)."'";
|
||||
// TODO Check if 2 users has same API key.
|
||||
$sql .= " WHERE u.api_key = '".$this->db->escape($api_key)."' OR u.api_key = '".$this->db->escape(dolEncrypt($api_key, '', '', 'dolibarr'))."'";
|
||||
|
||||
$result = $this->db->query($sql);
|
||||
if ($result) {
|
||||
if ($this->db->num_rows($result)) {
|
||||
$nbrows = $this->db->num_rows($result);
|
||||
if ($nbrows == 1) {
|
||||
$obj = $this->db->fetch_object($result);
|
||||
$login = $obj->login;
|
||||
$stored_key = $obj->api_key;
|
||||
$stored_key = dolDecrypt($obj->api_key);
|
||||
$userentity = $obj->entity;
|
||||
|
||||
if (!defined("DOLENTITY") && $conf->entity != ($obj->entity ? $obj->entity : 1)) { // If API was not forced with HTTP_DOLENTITY, and user is on another entity, so we reset entity to entity of user
|
||||
@ -130,6 +130,8 @@ class DolibarrApiAccess implements iAuthenticate
|
||||
dol_syslog("Entity was not set on http header with HTTP_DOLAPIENTITY (recommanded for performance purpose), so we switch now on entity of user (".$conf->entity.") and we have to reload configuration.", LOG_WARNING);
|
||||
$conf->setValues($this->db);
|
||||
}
|
||||
} elseif ($nbrows > 1) {
|
||||
throw new RestException(503, 'Error when fetching user api_key : More than 1 user with this apikey');
|
||||
}
|
||||
} else {
|
||||
throw new RestException(503, 'Error when fetching user api_key :'.$this->db->error_msg);
|
||||
|
||||
@ -18,6 +18,7 @@
|
||||
|
||||
use Luracast\Restler\RestException;
|
||||
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/security.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
|
||||
|
||||
/**
|
||||
@ -152,7 +153,7 @@ class Login
|
||||
|
||||
// We store API token into database
|
||||
$sql = "UPDATE ".MAIN_DB_PREFIX."user";
|
||||
$sql .= " SET api_key = '".$this->db->escape($token)."'";
|
||||
$sql .= " SET api_key = '".$this->db->escape(dolEncrypt($token, '', '', 'dolibarr'))."'";
|
||||
$sql .= " WHERE login = '".$this->db->escape($login)."'";
|
||||
|
||||
dol_syslog(get_class($this)."::login", LOG_DEBUG); // No log
|
||||
|
||||
@ -155,9 +155,6 @@ if (!empty($conf->global->AGENDA_REMINDER_EMAIL)) {
|
||||
$TDurationTypes = array('y'=>$langs->trans('Years'), 'm'=>$langs->trans('Month'), 'w'=>$langs->trans('Weeks'), 'd'=>$langs->trans('Days'), 'h'=>$langs->trans('Hours'), 'i'=>$langs->trans('Minutes'));
|
||||
|
||||
$result = restrictedArea($user, 'agenda', $object->id, 'actioncomm&societe', 'myactions|allactions', 'fk_soc', 'id');
|
||||
if ($user->socid && $socid) {
|
||||
$result = restrictedArea($user, 'societe', $socid);
|
||||
}
|
||||
|
||||
$usercancreate = $user->hasRight('agenda', 'allactions', 'create') || (($object->authorid == $user->id || $object->userownerid == $user->id) && $user->rights->agenda->myactions->create);
|
||||
|
||||
|
||||
@ -140,7 +140,7 @@ if ($object->id > 0) {
|
||||
|
||||
// Object card
|
||||
// ------------------------------------------------------------
|
||||
$linkback = '<a href="'.dol_buildpath('/mymodule/myobject_list.php', 1).'?restore_lastsearch_values=1'.(!empty($socid) ? '&socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>';
|
||||
$linkback = '<a href="'.DOL_URL_ROOT.'/comm/propal/list.php?restore_lastsearch_values=1'.(!empty($socid) ? '&socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>';
|
||||
|
||||
$morehtmlref = '<div class="refidno">';
|
||||
// Ref customer
|
||||
|
||||
@ -955,6 +955,8 @@ if (empty($reshook)) {
|
||||
$price_ttc = '';
|
||||
$price_ttc_devise = '';
|
||||
|
||||
// TODO Implement if (getDolGlobalInt('MAIN_UNIT_PRICE_WITH_TAX_IS_FOR_ALL_TAXES'))
|
||||
|
||||
if (GETPOST('price_ht') !== '') {
|
||||
$price_ht = price2num(GETPOST('price_ht'), 'MU', 2);
|
||||
}
|
||||
|
||||
@ -871,6 +871,8 @@ class Propal extends CommonObject
|
||||
$txtva = preg_replace('/\s*\(.*\)/', '', $txtva); // Remove code into vatrate.
|
||||
}
|
||||
|
||||
// TODO Implement if (getDolGlobalInt('MAIN_UNIT_PRICE_WITH_TAX_IS_FOR_ALL_TAXES')) ?
|
||||
|
||||
$tabprice = calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type, $mysoc, $localtaxes_type, 100, $this->multicurrency_tx, $pu_ht_devise);
|
||||
$total_ht = $tabprice[0];
|
||||
$total_tva = $tabprice[1];
|
||||
|
||||
@ -196,7 +196,7 @@ $search_array_options = $extrafields->getOptionalsFromPost($object->table_elemen
|
||||
// List of fields to search into when doing a "search in all"
|
||||
$fieldstosearchall = array(
|
||||
'p.ref'=>'Ref',
|
||||
'p.ref_client'=>'CustomerRef',
|
||||
'p.ref_client'=>'RefCustomer',
|
||||
'pd.description'=>'Description',
|
||||
's.nom'=>"ThirdParty",
|
||||
's.name_alias'=>"AliasNameShort",
|
||||
|
||||
@ -223,6 +223,7 @@ include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_array_fields.tpl.php';
|
||||
$object->fields = dol_sort_array($object->fields, 'position');
|
||||
$arrayfields = dol_sort_array($arrayfields, 'position');
|
||||
|
||||
$error = 0;
|
||||
|
||||
|
||||
/*
|
||||
@ -1284,24 +1285,24 @@ if ($resql) {
|
||||
if ($permissiontovalidate) {
|
||||
$arrayofmassactions['prevalidate'] = img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("Validate");
|
||||
}
|
||||
if ($permissiontosendbymail) {
|
||||
$arrayofmassactions['presend'] = img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail");
|
||||
}
|
||||
if ($permissiontoclose) {
|
||||
$arrayofmassactions['preshipped'] = img_picto('', 'dollyrevert', 'class="pictofixedwidth"').$langs->trans("ClassifyShipped");
|
||||
}
|
||||
if ($permissiontocancel) {
|
||||
$arrayofmassactions['cancelorders'] = img_picto('', 'close_title', 'class="pictofixedwidth"').$langs->trans("Cancel");
|
||||
}
|
||||
if (isModEnabled('facture') && $user->hasRight("facture", "creer")) {
|
||||
$arrayofmassactions['createbills'] = img_picto('', 'bill', 'class="pictofixedwidth"').$langs->trans("CreateInvoiceForThisCustomer");
|
||||
}
|
||||
if ($permissiontoclose) {
|
||||
$arrayofmassactions['setbilled'] = img_picto('', 'bill', 'class="pictofixedwidth"').$langs->trans("ClassifyBilled");
|
||||
}
|
||||
if ($permissiontocancel) {
|
||||
$arrayofmassactions['cancelorders'] = img_picto('', 'close_title', 'class="pictofixedwidth"').$langs->trans("Cancel");
|
||||
}
|
||||
if ($permissiontodelete) {
|
||||
$arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete");
|
||||
}
|
||||
if (isModEnabled('facture') && $user->hasRight("facture", "creer")) {
|
||||
$arrayofmassactions['createbills'] = img_picto('', 'bill', 'class="pictofixedwidth"').$langs->trans("CreateInvoiceForThisCustomer");
|
||||
}
|
||||
if ($permissiontosendbymail) {
|
||||
$arrayofmassactions['presend'] = img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail");
|
||||
}
|
||||
if (in_array($massaction, array('presend', 'predelete', 'createbills'))) {
|
||||
$arrayofmassactions = array();
|
||||
}
|
||||
|
||||
@ -18,7 +18,7 @@
|
||||
* Copyright (C) 2018-2022 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||
* Copyright (C) 2018 Nicolas ZABOURI <info@inovea-conseil.com>
|
||||
* Copyright (C) 2022 Sylvain Legrand <contact@infras.fr>
|
||||
* Copyright (C) 2022 Gauthier VERDOL <gauthier.verdol@atm-consulting.fr>
|
||||
* Copyright (C) 2023 Gauthier VERDOL <gauthier.verdol@atm-consulting.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
|
||||
@ -2695,7 +2695,7 @@ class Facture extends CommonInvoice
|
||||
return -5;
|
||||
}
|
||||
|
||||
$sql = 'UPDATE '.MAIN_DB_PREFIX.'projet_task_time';
|
||||
$sql = 'UPDATE '.MAIN_DB_PREFIX.'element_time';
|
||||
$sql .= ' SET invoice_id = NULL, invoice_line_id = NULL';
|
||||
$sql .= ' WHERE invoice_id = '.((int) $rowid);
|
||||
|
||||
@ -4230,19 +4230,6 @@ class Facture extends CommonInvoice
|
||||
|
||||
$this->db->begin();
|
||||
|
||||
// Free discount linked to invoice line
|
||||
$sql = 'UPDATE '.MAIN_DB_PREFIX.'societe_remise_except';
|
||||
$sql .= ' SET fk_facture_line = NULL';
|
||||
$sql .= ' WHERE fk_facture_line = '.((int) $rowid);
|
||||
|
||||
dol_syslog(get_class($this)."::deleteline", LOG_DEBUG);
|
||||
$result = $this->db->query($sql);
|
||||
if (!$result) {
|
||||
$this->error = $this->db->error();
|
||||
$this->db->rollback();
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Memorize previous line for triggers
|
||||
$staticline = clone $line;
|
||||
$line->oldline = $staticline;
|
||||
@ -6444,13 +6431,38 @@ class FactureLigne extends CommonInvoiceLine
|
||||
return -1;
|
||||
}
|
||||
|
||||
$sql = "DELETE FROM ".MAIN_DB_PREFIX."facturedet WHERE rowid = ".((int) $this->rowid);
|
||||
// Free discount linked to invoice line
|
||||
$sql = 'UPDATE '.MAIN_DB_PREFIX.'societe_remise_except';
|
||||
$sql .= ' SET fk_facture_line = NULL';
|
||||
$sql .= ' WHERE fk_facture_line = '.((int) $this->id);
|
||||
|
||||
dol_syslog(get_class($this)."::deleteline", LOG_DEBUG);
|
||||
$result = $this->db->query($sql);
|
||||
if (!$result) {
|
||||
$this->error = $this->db->error();
|
||||
$this->errors[] = $this->error;
|
||||
$this->db->rollback();
|
||||
return -1;
|
||||
}
|
||||
|
||||
$sql = 'UPDATE '.MAIN_DB_PREFIX.'projet_task_time';
|
||||
$sql .= ' SET invoice_id = NULL, invoice_line_id = NULL';
|
||||
$sql .= ' WHERE invoice_line_id = '.((int) $this->id);
|
||||
if (!$this->db->query($sql)) {
|
||||
$this->error = $this->db->error()." sql=".$sql;
|
||||
$this->errors[] = $this->error;
|
||||
$this->db->rollback();
|
||||
return -1;
|
||||
}
|
||||
|
||||
$sql = "DELETE FROM ".MAIN_DB_PREFIX."facturedet WHERE rowid = ".((int) $this->id);
|
||||
|
||||
if ($this->db->query($sql)) {
|
||||
$this->db->commit();
|
||||
return 1;
|
||||
} else {
|
||||
$this->error = $this->db->error()." sql=".$sql;
|
||||
$this->errors[] = $this->error;
|
||||
$this->db->rollback();
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1035,7 +1035,7 @@ while ($i < $imaxinloop) {
|
||||
// Status
|
||||
if (!empty($arrayfields['status']['checked'])) {
|
||||
print '<td class="center">';
|
||||
print $invoicerectmp->getLibStatut(3, 0);
|
||||
print $invoicerectmp->getLibStatut(5, 0);
|
||||
print '</td>';
|
||||
if (!$i) {
|
||||
$totalarray['nbfield']++;
|
||||
|
||||
@ -70,36 +70,34 @@ if (!$sortorder) {
|
||||
}
|
||||
|
||||
// Date range
|
||||
$year = GETPOST('year', 'int');
|
||||
$year = GETPOST('year', 'int'); // this is used for navigation previous/next. It is the last year to show in filter
|
||||
if (empty($year)) {
|
||||
$year_current = dol_print_date(dol_now(), "%Y");
|
||||
$month_current = dol_print_date(dol_now(), "%m");
|
||||
$year_start = $year_current;
|
||||
$year_start = $year_current - ($nbofyear - 1);
|
||||
} else {
|
||||
$year_current = $year;
|
||||
$month_current = dol_print_date(dol_now(), "%m");
|
||||
$year_start = $year;
|
||||
$year_start = $year - $nbofyear + (getDolGlobalInt('SOCIETE_FISCAL_MONTH_START') > 1 ? 0 : 1);
|
||||
}
|
||||
$date_start = dol_mktime(0, 0, 0, $date_startmonth, $date_startday, $date_startyear);
|
||||
$date_end = dol_mktime(23, 59, 59, $date_endmonth, $date_endday, $date_endyear);
|
||||
|
||||
// We define date_start and date_end
|
||||
if (empty($date_start) || empty($date_end)) { // We define date_start and date_end
|
||||
$q = GETPOST("q") ?GETPOST("q") : 0;
|
||||
$q = GETPOST("q") ? GETPOST("q", 'int') : 0;
|
||||
if ($q == 0) {
|
||||
// We define date_start and date_end
|
||||
$year_end = $year_start;
|
||||
$month_start = GETPOST("month") ?GETPOST("month") : ($conf->global->SOCIETE_FISCAL_MONTH_START ? ($conf->global->SOCIETE_FISCAL_MONTH_START) : 1);
|
||||
$year_end = $year_start + $nbofyear - (getDolGlobalInt('SOCIETE_FISCAL_MONTH_START') > 1 ? 0 : 1);
|
||||
$month_start = GETPOST("month") ? GETPOST("month", 'int') : getDolGlobalInt('SOCIETE_FISCAL_MONTH_START', 1);
|
||||
if (!GETPOST('month')) {
|
||||
if (!GETPOST("year") && $month_start > $month_current) {
|
||||
if (!$year && $month_start > $month_current) {
|
||||
$year_start--;
|
||||
$year_end--;
|
||||
}
|
||||
$month_end = $month_start - 1;
|
||||
if ($month_end < 1) {
|
||||
$month_end = 12;
|
||||
} else {
|
||||
$year_end++;
|
||||
}
|
||||
} else {
|
||||
$month_end = $month_start;
|
||||
@ -157,6 +155,7 @@ if (isModEnabled('accounting')) {
|
||||
}
|
||||
$hookmanager->initHooks(['customersupplierreportlist']);
|
||||
|
||||
|
||||
/*
|
||||
* View
|
||||
*/
|
||||
@ -174,13 +173,6 @@ $total_ttc = 0;
|
||||
// Affiche en-tete de rapport
|
||||
if ($modecompta == "CREANCES-DETTES") {
|
||||
$name = $langs->trans("ReportInOut").', '.$langs->trans("ByPredefinedAccountGroups");
|
||||
$calcmode = $langs->trans("CalcModeDebt");
|
||||
$calcmode .= '<br>('.$langs->trans("SeeReportInInputOutputMode", '{s1}', '{s2}').')';
|
||||
$calcmode = str_replace(array('{s1}', '{s2}'), array('<a href="'.$_SERVER["PHP_SELF"].'?date_startyear='.$tmps['year'].'&date_startmonth='.$tmps['mon'].'&date_startday='.$tmps['mday'].'&date_endyear='.$tmpe['year'].'&date_endmonth='.$tmpe['mon'].'&date_endday='.$tmpe['mday'].'&modecompta=RECETTES-DEPENSES">', '</a>'), $calcmode);
|
||||
if (isModEnabled('accounting')) {
|
||||
$calcmode .= '<br>('.$langs->trans("SeeReportInBookkeepingMode", '{s1}', '{s2}').')';
|
||||
$calcmode = str_replace(array('{s1}', '{s2}'), array('<a href="'.$_SERVER["PHP_SELF"].'?date_startyear='.$tmps['year'].'&date_startmonth='.$tmps['mon'].'&date_startday='.$tmps['mday'].'&date_endyear='.$tmpe['year'].'&date_endmonth='.$tmpe['mon'].'&date_endday='.$tmpe['mday'].'&modecompta=BOOKKEEPING">', '</a>'), $calcmode);
|
||||
}
|
||||
$period = $form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
|
||||
$periodlink = ($year_start ? "<a href='".$_SERVER["PHP_SELF"]."?year=".($tmps['year'] - 1)."&modecompta=".$modecompta."'>".img_previous()."</a> <a href='".$_SERVER["PHP_SELF"]."?year=".($tmps['year'] + 1)."&modecompta=".$modecompta."'>".img_next()."</a>" : "");
|
||||
$description = $langs->trans("RulesResultDue");
|
||||
@ -196,13 +188,6 @@ if ($modecompta == "CREANCES-DETTES") {
|
||||
//$exportlink=$langs->trans("NotYetAvailable");
|
||||
} elseif ($modecompta == "RECETTES-DEPENSES") {
|
||||
$name = $langs->trans("ReportInOut").', '.$langs->trans("ByPredefinedAccountGroups");
|
||||
$calcmode = $langs->trans("CalcModeEngagement");
|
||||
$calcmode .= '<br>('.$langs->trans("SeeReportInDueDebtMode", '{s1}', '{s2}').')';
|
||||
$calcmode = str_replace(array('{s1}', '{s2}'), array('<a href="'.$_SERVER["PHP_SELF"].'?date_startyear='.$tmps['year'].'&date_startmonth='.$tmps['mon'].'&date_startday='.$tmps['mday'].'&date_endyear='.$tmpe['year'].'&date_endmonth='.$tmpe['mon'].'&date_endday='.$tmpe['mday'].'&modecompta=CREANCES-DETTES">', '</a>'), $calcmode);
|
||||
if (isModEnabled('accounting')) {
|
||||
$calcmode .= '<br>('.$langs->trans("SeeReportInBookkeepingMode", '{s1}', '{s2}').')';
|
||||
$calcmode = str_replace(array('{s1}', '{s2}'), array('<a href="'.$_SERVER["PHP_SELF"].'?date_startyear='.$tmps['year'].'&date_startmonth='.$tmps['mon'].'&date_startday='.$tmps['mday'].'&date_endyear='.$tmpe['year'].'&date_endmonth='.$tmpe['mon'].'&date_endday='.$tmpe['mday'].'&modecompta=BOOKKEEPING">', '</a>'), $calcmode);
|
||||
}
|
||||
$period = $form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
|
||||
$periodlink = ($year_start ? "<a href='".$_SERVER["PHP_SELF"]."?year=".($tmps['year'] - 1)."&modecompta=".$modecompta."'>".img_previous()."</a> <a href='".$_SERVER["PHP_SELF"]."?year=".($tmps['year'] + 1)."&modecompta=".$modecompta."'>".img_next()."</a>" : "");
|
||||
$description = $langs->trans("RulesResultInOut");
|
||||
@ -210,14 +195,9 @@ if ($modecompta == "CREANCES-DETTES") {
|
||||
//$exportlink=$langs->trans("NotYetAvailable");
|
||||
} elseif ($modecompta == "BOOKKEEPING") {
|
||||
$name = $langs->trans("ReportInOut").', '.$langs->trans("ByPredefinedAccountGroups");
|
||||
$calcmode = $langs->trans("CalcModeBookkeeping");
|
||||
$calcmode .= '<br>('.$langs->trans("SeeReportInInputOutputMode", '{s1}', '{s2}').')';
|
||||
$calcmode = str_replace(array('{s1}', '{s2}'), array('<a href="'.$_SERVER["PHP_SELF"].'?date_startyear='.$tmps['year'].'&date_startmonth='.$tmps['mon'].'&date_startday='.$tmps['mday'].'&date_endyear='.$tmpe['year'].'&date_endmonth='.$tmpe['mon'].'&date_endday='.$tmpe['mday'].'&modecompta=RECETTES-DEPENSES">', '</a>'), $calcmode);
|
||||
$calcmode .= '<br>('.$langs->trans("SeeReportInDueDebtMode", '{s1}', '{s2}').')';
|
||||
$calcmode = str_replace(array('{s1}', '{s2}'), array('<a href="'.$_SERVER["PHP_SELF"].'?date_startyear='.$tmps['year'].'&date_startmonth='.$tmps['mon'].'&date_startday='.$tmps['mday'].'&date_endyear='.$tmpe['year'].'&date_endmonth='.$tmpe['mon'].'&date_endday='.$tmpe['mday'].'&modecompta=CREANCES-DETTES">', '</a>'), $calcmode);
|
||||
$period = $form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
|
||||
$arraylist = array('no'=>$langs->trans("CustomerCode"), 'yes'=>$langs->trans("AccountWithNonZeroValues"), 'all'=>$langs->trans("All"));
|
||||
$period .= ' '.$langs->trans("DetailByAccount").' '.$form->selectarray('showaccountdetail', $arraylist, $showaccountdetail, 0);
|
||||
$period .= ' <span class="opacitymedium">'.$langs->trans("DetailBy").'</span> '.$form->selectarray('showaccountdetail', $arraylist, $showaccountdetail, 0);
|
||||
$periodlink = ($year_start ? "<a href='".$_SERVER["PHP_SELF"]."?year=".($tmps['year'] - 1)."&modecompta=".$modecompta."&showaccountdetail=".$showaccountdetail."'>".img_previous()."</a> <a href='".$_SERVER["PHP_SELF"]."?year=".($tmps['year'] + 1)."&modecompta=".$modecompta."&showaccountdetail=".$showaccountdetail."'>".img_next()."</a>" : "");
|
||||
$description = $langs->trans("RulesResultBookkeepingPredefined");
|
||||
$description .= ' ('.$langs->trans("SeePageForSetup", DOL_URL_ROOT.'/accountancy/admin/account.php?mainmenu=accountancy&leftmenu=accountancy_admin', $langs->transnoentitiesnoconv("Accountancy").' / '.$langs->transnoentitiesnoconv("Setup").' / '.$langs->transnoentitiesnoconv("Chartofaccounts")).')';
|
||||
@ -225,7 +205,23 @@ if ($modecompta == "CREANCES-DETTES") {
|
||||
//$exportlink=$langs->trans("NotYetAvailable");
|
||||
}
|
||||
|
||||
$hselected = 'report';
|
||||
// Define $calcmode line
|
||||
$calcmode = '';
|
||||
if (isModEnabled('accounting')) {
|
||||
$calcmode .= '<input type="radio" name="modecompta" id="modecompta3" value="BOOKKEEPING"'.($modecompta == 'BOOKKEEPING' ? ' checked="checked"' : '').'><label for="modecompta3"> '.$langs->trans("CalcModeBookkeeping").'</label>';
|
||||
$calcmode .= '<br>';
|
||||
}
|
||||
$calcmode .= '<input type="radio" name="modecompta" id="modecompta1" value="RECETTES-DEPENSES"'.($modecompta == 'RECETTES-DEPENSES' ? ' checked="checked"' : '').'><label for="modecompta1"> '.$langs->trans("CalcModeDebt");
|
||||
if (isModEnabled('accounting')) {
|
||||
$calcmode .= ' <span class="opacitymedium hideonsmartphone">('.$langs->trans("CalcModeNoBookKeeping").')</span>';
|
||||
}
|
||||
$calcmode .= '</label>';
|
||||
$calcmode .= '<br><input type="radio" name="modecompta" id="modecompta2" value="CREANCES-DETTES"'.($modecompta == 'CREANCES-DETTES' ? ' checked="checked"' : '').'><label for="modecompta2"> '.$langs->trans("CalcModeEngagement");
|
||||
if (isModEnabled('accounting')) {
|
||||
$calcmode .= ' <span class="opacitymedium hideonsmartphone">('.$langs->trans("CalcModeNoBookKeeping").')</span>';
|
||||
}
|
||||
$calcmode .= '</label>';
|
||||
|
||||
|
||||
report_header($name, '', $period, $periodlink, $description, $builddate, $exportlink, array('modecompta'=>$modecompta, 'showaccountdetail'=>$showaccountdetail), $calcmode);
|
||||
|
||||
|
||||
@ -36,17 +36,21 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
||||
// Load translation files required by the page
|
||||
$langs->loadLangs(array('compta', 'bills', 'donation', 'salaries'));
|
||||
|
||||
$date_startmonth = GETPOST('date_startmonth', 'int');
|
||||
$date_startday = GETPOST('date_startday', 'int');
|
||||
$date_startmonth = GETPOST('date_startmonth', 'int');
|
||||
$date_startyear = GETPOST('date_startyear', 'int');
|
||||
$date_endmonth = GETPOST('date_endmonth', 'int');
|
||||
$date_endday = GETPOST('date_endday', 'int');
|
||||
$date_endmonth = GETPOST('date_endmonth', 'int');
|
||||
$date_endyear = GETPOST('date_endyear', 'int');
|
||||
|
||||
$nbofyear = 4;
|
||||
|
||||
// Change this to test different cases of setup
|
||||
//$conf->global->SOCIETE_FISCAL_MONTH_START = 7;
|
||||
|
||||
|
||||
// Date range
|
||||
$year = GETPOST('year', 'int');
|
||||
$year = GETPOST('year', 'int'); // this is used for navigation previous/next. It is the last year to show in filter
|
||||
if (empty($year)) {
|
||||
$year_current = dol_print_date(dol_now(), "%Y");
|
||||
$month_current = dol_print_date(dol_now(), "%m");
|
||||
@ -54,28 +58,26 @@ if (empty($year)) {
|
||||
} else {
|
||||
$year_current = $year;
|
||||
$month_current = dol_print_date(dol_now(), "%m");
|
||||
$year_start = $year - ($nbofyear - 1);
|
||||
$year_start = $year - $nbofyear + (getDolGlobalInt('SOCIETE_FISCAL_MONTH_START') > 1 ? 0 : 1);
|
||||
}
|
||||
$date_start = dol_mktime(0, 0, 0, $date_startmonth, $date_startday, $date_startyear);
|
||||
$date_end = dol_mktime(23, 59, 59, $date_endmonth, $date_endday, $date_endyear);
|
||||
$date_start = dol_mktime(0, 0, 0, $date_startmonth, $date_startday, $date_startyear, 'tzserver');
|
||||
$date_end = dol_mktime(23, 59, 59, $date_endmonth, $date_endday, $date_endyear, 'tzserver');
|
||||
|
||||
// We define date_start and date_end
|
||||
if (empty($date_start) || empty($date_end)) { // We define date_start and date_end
|
||||
$q = GETPOST("q") ? GETPOST("q", 'int') : 0;
|
||||
if ($q == 0) {
|
||||
// We define date_start and date_end
|
||||
$year_end = $year_start + ($nbofyear - 1);
|
||||
$month_start = GETPOST("month") ? GETPOST("month", 'int') : ($conf->global->SOCIETE_FISCAL_MONTH_START ? ($conf->global->SOCIETE_FISCAL_MONTH_START) : 1);
|
||||
$year_end = $year_start + $nbofyear - (getDolGlobalInt('SOCIETE_FISCAL_MONTH_START') > 1 ? 0 : 1);
|
||||
$month_start = GETPOST("month") ? GETPOST("month", 'int') : getDolGlobalInt('SOCIETE_FISCAL_MONTH_START', 1);
|
||||
if (!GETPOST('month')) {
|
||||
if (!GETPOST("year") && $month_start > $month_current) {
|
||||
if (!$year && $month_start > $month_current) {
|
||||
$year_start--;
|
||||
$year_end--;
|
||||
}
|
||||
$month_end = $month_start - 1;
|
||||
if ($month_end < 1) {
|
||||
$month_end = 12;
|
||||
} else {
|
||||
$year_end++;
|
||||
}
|
||||
} else {
|
||||
$month_end = $month_start;
|
||||
@ -149,13 +151,6 @@ $decaiss_ttc = array();
|
||||
// Affiche en-tete du rapport
|
||||
if ($modecompta == 'CREANCES-DETTES') {
|
||||
$name = $langs->trans("ReportInOut").', '.$langs->trans("ByYear");
|
||||
$calcmode = $langs->trans("CalcModeDebt");
|
||||
$calcmode .= '<br>('.$langs->trans("SeeReportInInputOutputMode", '{s1}', '{s2}').')';
|
||||
$calcmode = str_replace(array('{s1}', '{s2}'), array('<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=RECETTES-DEPENSES">', '</a>'), $calcmode);
|
||||
if (isModEnabled('accounting')) {
|
||||
$calcmode .= '<br>('.$langs->trans("SeeReportInBookkeepingMode", '{s1}', '{s2}').')';
|
||||
$calcmode = str_replace(array('{s1}', '{s2}'), array('<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=BOOKKEEPING">', '</a>'), $calcmode);
|
||||
}
|
||||
$period = $form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
|
||||
$periodlink = ($year_start ? "<a href='".$_SERVER["PHP_SELF"]."?year=".($year_start + $nbofyear - 2)."&modecompta=".$modecompta."'>".img_previous()."</a> <a href='".$_SERVER["PHP_SELF"]."?year=".($year_start + $nbofyear)."&modecompta=".$modecompta."'>".img_next()."</a>" : "");
|
||||
$description = $langs->trans("RulesAmountWithTaxExcluded");
|
||||
@ -172,13 +167,6 @@ if ($modecompta == 'CREANCES-DETTES') {
|
||||
//$exportlink=$langs->trans("NotYetAvailable");
|
||||
} elseif ($modecompta == "RECETTES-DEPENSES") {
|
||||
$name = $langs->trans("ReportInOut").', '.$langs->trans("ByYear");
|
||||
$calcmode = $langs->trans("CalcModeEngagement");
|
||||
$calcmode .= '<br>('.$langs->trans("SeeReportInDueDebtMode", '{s1}', '{s2}').')';
|
||||
$calcmode = str_replace(array('{s1}', '{s2}'), array('<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=CREANCES-DETTES">', '</a>'), $calcmode);
|
||||
if (isModEnabled('accounting')) {
|
||||
$calcmode .= '<br>('.$langs->trans("SeeReportInBookkeepingMode", '{s1}', '{s2}').')';
|
||||
$calcmode = str_replace(array('{s1}', '{s2}'), array('<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=BOOKKEEPING">', '</a>'), $calcmode);
|
||||
}
|
||||
$period = $form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
|
||||
$periodlink = ($year_start ? "<a href='".$_SERVER["PHP_SELF"]."?year=".($year_start + $nbofyear - 2)."&modecompta=".$modecompta."'>".img_previous()."</a> <a href='".$_SERVER["PHP_SELF"]."?year=".($year_start + $nbofyear)."&modecompta=".$modecompta."'>".img_next()."</a>" : "");
|
||||
$description = $langs->trans("RulesAmountWithTaxIncluded");
|
||||
@ -187,11 +175,6 @@ if ($modecompta == 'CREANCES-DETTES') {
|
||||
//$exportlink=$langs->trans("NotYetAvailable");
|
||||
} elseif ($modecompta == "BOOKKEEPING") {
|
||||
$name = $langs->trans("ReportInOut").', '.$langs->trans("ByYear");
|
||||
$calcmode = $langs->trans("CalcModeBookkeeping");
|
||||
$calcmode .= '<br>('.$langs->trans("SeeReportInInputOutputMode", '{s1}', '{s2}').')';
|
||||
$calcmode = str_replace(array('{s1}', '{s2}'), array('<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=RECETTES-DEPENSES">', '</a>'), $calcmode);
|
||||
$calcmode .= '<br>('.$langs->trans("SeeReportInDueDebtMode", '{s1}', '{s2}').')';
|
||||
$calcmode = str_replace(array('{s1}', '{s2}'), array('<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=CREANCES-DETTES">', '</a>'), $calcmode);
|
||||
$period = $form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
|
||||
$periodlink = ($year_start ? "<a href='".$_SERVER["PHP_SELF"]."?year=".($year_start + $nbofyear - 2)."&modecompta=".$modecompta."'>".img_previous()."</a> <a href='".$_SERVER["PHP_SELF"]."?year=".($year_start + $nbofyear)."&modecompta=".$modecompta."'>".img_next()."</a>" : "");
|
||||
$description = $langs->trans("RulesAmountOnInOutBookkeepingRecord");
|
||||
@ -200,9 +183,25 @@ if ($modecompta == 'CREANCES-DETTES') {
|
||||
//$exportlink=$langs->trans("NotYetAvailable");
|
||||
}
|
||||
|
||||
$hselected = 'report';
|
||||
// Define $calcmode line
|
||||
$calcmode = '';
|
||||
if (isModEnabled('accounting')) {
|
||||
$calcmode .= '<input type="radio" name="modecompta" id="modecompta3" value="BOOKKEEPING"'.($modecompta == 'BOOKKEEPING' ? ' checked="checked"' : '').'><label for="modecompta3"> '.$langs->trans("CalcModeBookkeeping").'</label>';
|
||||
$calcmode .= '<br>';
|
||||
}
|
||||
$calcmode .= '<input type="radio" name="modecompta" id="modecompta1" value="RECETTES-DEPENSES"'.($modecompta == 'RECETTES-DEPENSES' ? ' checked="checked"' : '').'><label for="modecompta1"> '.$langs->trans("CalcModeDebt");
|
||||
if (isModEnabled('accounting')) {
|
||||
$calcmode .= ' <span class="opacitymedium hideonsmartphone">('.$langs->trans("CalcModeNoBookKeeping").')</span>';
|
||||
}
|
||||
$calcmode .= '</label>';
|
||||
$calcmode .= '<br><input type="radio" name="modecompta" id="modecompta2" value="CREANCES-DETTES"'.($modecompta == 'CREANCES-DETTES' ? ' checked="checked"' : '').'><label for="modecompta2"> '.$langs->trans("CalcModeEngagement");
|
||||
if (isModEnabled('accounting')) {
|
||||
$calcmode .= ' <span class="opacitymedium hideonsmartphone">('.$langs->trans("CalcModeNoBookKeeping").')</span>';
|
||||
}
|
||||
$calcmode .= '</label>';
|
||||
|
||||
report_header($name, '', $period, $periodlink, $description, $builddate, $exportlink, array('modecompta'=>$modecompta), $calcmode);
|
||||
|
||||
report_header($name, '', $period, $periodlink, $description, $builddate, $exportlink, array(), $calcmode);
|
||||
|
||||
if (isModEnabled('accounting') && $modecompta != 'BOOKKEEPING') {
|
||||
print info_admin($langs->trans("WarningReportNotReliable"), 0, 0, 1);
|
||||
@ -996,17 +995,18 @@ $reshook = $hookmanager->executeHooks('addReportInfo', $parameters, $object, $ac
|
||||
|
||||
$totentrees = array();
|
||||
$totsorties = array();
|
||||
$year_end_for_table = ($year_end - (getDolGlobalInt('SOCIETE_FISCAL_MONTH_START') > 1 ? 1 : 0));
|
||||
|
||||
print '<div class="div-table-responsive">';
|
||||
print '<table class="tagtable liste">'."\n";
|
||||
|
||||
print '<tr class="liste_titre"><td class="liste_titre"> </td>';
|
||||
|
||||
for ($annee = $year_start; $annee <= $year_end; $annee++) {
|
||||
for ($annee = $year_start; $annee <= $year_end_for_table; $annee++) {
|
||||
print '<td align="center" colspan="2" class="liste_titre borderrightlight">';
|
||||
print '<a href="clientfourn.php?year='.$annee.'">';
|
||||
print '<a href="clientfourn.php?year='.((int) $annee).'">';
|
||||
print $annee;
|
||||
if ($conf->global->SOCIETE_FISCAL_MONTH_START > 1) {
|
||||
if (getDolGlobalInt('SOCIETE_FISCAL_MONTH_START') > 1) {
|
||||
print '-'.($annee + 1);
|
||||
}
|
||||
print '</a></td>';
|
||||
@ -1014,7 +1014,7 @@ for ($annee = $year_start; $annee <= $year_end; $annee++) {
|
||||
print '</tr>';
|
||||
print '<tr class="liste_titre"><td class="liste_titre">'.$langs->trans("Month").'</td>';
|
||||
// Loop on each year to ouput
|
||||
for ($annee = $year_start; $annee <= $year_end; $annee++) {
|
||||
for ($annee = $year_start; $annee <= $year_end_for_table; $annee++) {
|
||||
print '<td class="liste_titre" align="center">';
|
||||
$htmlhelp = '';
|
||||
// if ($modecompta == 'RECETTES-DEPENSES') $htmlhelp=$langs->trans("PurchasesPlusVATEarnedAndDue");
|
||||
@ -1039,7 +1039,7 @@ for ($mois = 1 + $nb_mois_decalage; $mois <= 12 + $nb_mois_decalage; $mois++) {
|
||||
|
||||
print '<tr class="oddeven">';
|
||||
print "<td>".dol_print_date(dol_mktime(12, 0, 0, $mois_modulo, 1, $annee), "%B")."</td>";
|
||||
for ($annee = $year_start; $annee <= $year_end; $annee++) {
|
||||
for ($annee = $year_start; $annee <= $year_end_for_table; $annee++) {
|
||||
$annee_decalage = $annee;
|
||||
if ($mois > 12) {
|
||||
$annee_decalage = $annee + 1;
|
||||
@ -1100,7 +1100,7 @@ if ($modecompta == 'CREANCES-DETTES' || $modecompta == 'BOOKKEEPING') {
|
||||
print $langs->trans("TotalTTC");
|
||||
}
|
||||
print '</td>';
|
||||
for ($annee = $year_start; $annee <= $year_end; $annee++) {
|
||||
for ($annee = $year_start; $annee <= $year_end_for_table; $annee++) {
|
||||
$nbcols += 2;
|
||||
print '<td class="nowrap right">'.(isset($totsorties[$annee]) ?price(price2num($totsorties[$annee], 'MT')) : ' ').'</td>';
|
||||
print '<td class="nowrap right" style="border-right: 1px solid #DDD">'.(isset($totentrees[$annee]) ?price(price2num($totentrees[$annee], 'MT')) : ' ').'</td>';
|
||||
@ -1115,7 +1115,7 @@ print "</tr>\n";
|
||||
// Balance
|
||||
|
||||
print '<tr class="liste_total"><td>'.$langs->trans("AccountingResult").'</td>';
|
||||
for ($annee = $year_start; $annee <= $year_end; $annee++) {
|
||||
for ($annee = $year_start; $annee <= $year_end_for_table; $annee++) {
|
||||
print '<td colspan="2" class="borderrightlight right"> ';
|
||||
if (isset($totentrees[$annee]) || isset($totsorties[$annee])) {
|
||||
$in = (isset($totentrees[$annee]) ?price2num($totentrees[$annee], 'MT') : 0);
|
||||
|
||||
@ -56,15 +56,18 @@ $date_endyear = GETPOST('date_endyear', 'int');
|
||||
|
||||
$nbofyear = 1;
|
||||
|
||||
// Change this to test different cases of setup
|
||||
//$conf->global->SOCIETE_FISCAL_MONTH_START = 7;
|
||||
|
||||
// Date range
|
||||
$year = GETPOST('year', 'int');
|
||||
$year = GETPOST('year', 'int'); // year with current month, is the month of the period we must show
|
||||
if (empty($year)) {
|
||||
$year_current = dol_print_date(dol_now('gmt'), "%Y", 'gmt');
|
||||
$month_current = strftime("%m", dol_now());
|
||||
$month_current = dol_print_date(dol_now(), "%m");
|
||||
$year_start = $year_current - ($nbofyear - 1);
|
||||
} else {
|
||||
$year_current = $year;
|
||||
$month_current = strftime("%m", dol_now());
|
||||
$month_current = dol_print_date(dol_now(), "%m");
|
||||
$year_start = $year - ($nbofyear - 1);
|
||||
}
|
||||
$date_start = dol_mktime(0, 0, 0, $date_startmonth, $date_startday, $date_startyear);
|
||||
@ -72,14 +75,14 @@ $date_end = dol_mktime(23, 59, 59, $date_endmonth, $date_endday, $date_endyear);
|
||||
|
||||
// We define date_start and date_end
|
||||
if (empty($date_start) || empty($date_end)) { // We define date_start and date_end
|
||||
$q = GETPOST("q") ?GETPOST("q") : 0;
|
||||
$q = GETPOST("q") ?GETPOST("q", 'int') : 0;
|
||||
if ($q == 0) {
|
||||
// We define date_start and date_end
|
||||
$year_end = $year_start + ($nbofyear - 1);
|
||||
$month_start = GETPOST("month", 'int') ?GETPOST("month", 'int') : ($conf->global->SOCIETE_FISCAL_MONTH_START ? ($conf->global->SOCIETE_FISCAL_MONTH_START) : 1);
|
||||
$date_startmonth = $month_start;
|
||||
if (!GETPOST('month')) {
|
||||
if (!GETPOST("year") && $month_start > $month_current) {
|
||||
if (!$year && $month_start > $month_current) {
|
||||
$year_start--;
|
||||
$year_end--;
|
||||
}
|
||||
@ -141,7 +144,7 @@ $modecompta = $conf->global->ACCOUNTING_MODE;
|
||||
if (isModEnabled('accounting')) {
|
||||
$modecompta = 'BOOKKEEPING';
|
||||
}
|
||||
if (GETPOST("modecompta")) {
|
||||
if (GETPOST("modecompta", 'alpha')) {
|
||||
$modecompta = GETPOST("modecompta", 'alpha');
|
||||
}
|
||||
|
||||
@ -228,8 +231,8 @@ if ($modecompta == "CREANCES-DETTES") {
|
||||
//$calcmode.='<br>('.$langs->trans("SeeReportInDueDebtMode",'<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=CREANCES-DETTES">','</a>').')';
|
||||
//$calcmode.='<br>('.$langs->trans("SeeReportInInputOutputMode",'<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=RECETTES-DEPENSES">','</a>').')';
|
||||
$period = $form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
|
||||
$arraylist = array('no'=>$langs->trans("No"), 'yes'=>$langs->trans("AccountWithNonZeroValues"), 'all'=>$langs->trans("All"));
|
||||
$period .= ' '.$langs->trans("DetailByAccount").' '.$form->selectarray('showaccountdetail', $arraylist, $showaccountdetail, 0);
|
||||
$arraylist = array('no'=>$langs->trans("None"), 'yes'=>$langs->trans("AccountWithNonZeroValues"), 'all'=>$langs->trans("All"));
|
||||
$period .= ' <span class="opacitymedium">'.$langs->trans("DetailBy").'</span> '.$form->selectarray('showaccountdetail', $arraylist, $showaccountdetail, 0);
|
||||
$periodlink = $textprevyear.$textnextyear;
|
||||
$exportlink = '';
|
||||
$description = $langs->trans("RulesResultBookkeepingPersonalized");
|
||||
|
||||
@ -50,28 +50,26 @@ if (empty($year)) {
|
||||
} else {
|
||||
$year_current = $year;
|
||||
$month_current = dol_print_date(dol_now(), "%m");
|
||||
$year_start = $year - ($nbofyear - 1);
|
||||
$year_start = $year - $nbofyear + (getDolGlobalInt('SOCIETE_FISCAL_MONTH_START') > 1 ? 0 : 1);
|
||||
}
|
||||
$date_start = dol_mktime(0, 0, 0, $date_startmonth, $date_startday, $date_startyear, 'tzserver');
|
||||
$date_end = dol_mktime(23, 59, 59, $date_endmonth, $date_endday, $date_endyear, 'tzserver');
|
||||
$date_start = dol_mktime(0, 0, 0, $date_startmonth, $date_startday, $date_startyear, 'tzserver'); // We use timezone of server so report is same from everywhere
|
||||
$date_end = dol_mktime(23, 59, 59, $date_endmonth, $date_endday, $date_endyear, 'tzserver'); // We use timezone of server so report is same from everywhere
|
||||
|
||||
// We define date_start and date_end
|
||||
if (empty($date_start) || empty($date_end)) { // We define date_start and date_end
|
||||
$q = GETPOST("q") ? GETPOST("q") : 0;
|
||||
if ($q == 0) {
|
||||
// We define date_start and date_end
|
||||
$year_end = $year_start + ($nbofyear - 1);
|
||||
$month_start = GETPOSTISSET("month") ? GETPOST("month", 'int') : ($conf->global->SOCIETE_FISCAL_MONTH_START ? $conf->global->SOCIETE_FISCAL_MONTH_START : 1);
|
||||
$year_end = $year_start + $nbofyear - (getDolGlobalInt('SOCIETE_FISCAL_MONTH_START') > 1 ? 0 : 1);
|
||||
$month_start = GETPOSTISSET("month") ? GETPOST("month", 'int') : getDolGlobalInt('SOCIETE_FISCAL_MONTH_START', 1);
|
||||
if (!GETPOST('month')) {
|
||||
if (!GETPOST("year") && $month_start > $month_current) {
|
||||
if (!$year && $month_start > $month_current) {
|
||||
$year_start--;
|
||||
$year_end--;
|
||||
}
|
||||
$month_end = $month_start - 1;
|
||||
if ($month_end < 1) {
|
||||
$month_end = 12;
|
||||
} else {
|
||||
$year_end++;
|
||||
}
|
||||
} else {
|
||||
$month_end = $month_start;
|
||||
@ -97,9 +95,6 @@ if (empty($date_start) || empty($date_end)) { // We define date_start and date_e
|
||||
}
|
||||
}
|
||||
|
||||
$userid = GETPOST('userid', 'int');
|
||||
$socid = GETPOST('socid', 'int');
|
||||
|
||||
$tmps = dol_getdate($date_start);
|
||||
$mothn_start = $tmps['mon'];
|
||||
$year_start = $tmps['year'];
|
||||
@ -113,11 +108,14 @@ $modecompta = $conf->global->ACCOUNTING_MODE;
|
||||
if (isModEnabled('accounting')) {
|
||||
$modecompta = 'BOOKKEEPING';
|
||||
}
|
||||
if (GETPOST("modecompta")) {
|
||||
if (GETPOST("modecompta", 'alpha')) {
|
||||
$modecompta = GETPOST("modecompta", 'alpha');
|
||||
}
|
||||
|
||||
$userid = GETPOST('userid', 'int');
|
||||
|
||||
// Security check
|
||||
$socid = GETPOST('socid', 'int');
|
||||
if ($user->socid > 0) {
|
||||
$socid = $user->socid;
|
||||
}
|
||||
@ -147,18 +145,13 @@ llxHeader();
|
||||
|
||||
$form = new Form($db);
|
||||
|
||||
$exportlink="";
|
||||
$namelink="";
|
||||
$exportlink = '';
|
||||
$namelink = '';
|
||||
$builddate = dol_now();
|
||||
|
||||
// Affiche en-tete du rapport
|
||||
if ($modecompta == "CREANCES-DETTES") {
|
||||
$name = $langs->trans("Turnover");
|
||||
$calcmode = $langs->trans("CalcModeDebt");
|
||||
//$calcmode.='<br>('.$langs->trans("SeeReportInInputOutputMode",'<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=RECETTES-DEPENSES">','</a>').')';
|
||||
if (isModEnabled('accounting')) {
|
||||
$calcmode .= '<br>('.$langs->trans("SeeReportInBookkeepingMode", '{link1}', '{link2}').')';
|
||||
$calcmode = str_replace('{link1}', '<a class="bold" href="'.$_SERVER["PHP_SELF"].'?'.($param ? $param : 'year_start='.$year_start).'&modecompta=BOOKKEEPING">', $calcmode);
|
||||
$calcmode = str_replace('{link2}', '</a>', $calcmode);
|
||||
}
|
||||
$periodlink = ($year_start ? "<a href='".$_SERVER["PHP_SELF"]."?year=".($year_start + $nbofyear - 2)."&modecompta=".$modecompta."'>".img_previous()."</a> <a href='".$_SERVER["PHP_SELF"]."?year=".($year_start + $nbofyear)."&modecompta=".$modecompta."'>".img_next()."</a>" : "");
|
||||
$description = $langs->trans("RulesCADue");
|
||||
if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) {
|
||||
@ -166,30 +159,17 @@ if ($modecompta == "CREANCES-DETTES") {
|
||||
} else {
|
||||
$description .= $langs->trans("DepositsAreIncluded");
|
||||
}
|
||||
$builddate = dol_now();
|
||||
//$exportlink=$langs->trans("NotYetAvailable");
|
||||
} elseif ($modecompta == "RECETTES-DEPENSES") {
|
||||
$name = $langs->trans("TurnoverCollected");
|
||||
$calcmode = $langs->trans("CalcModeEngagement");
|
||||
//$calcmode .= '<br>('.$langs->trans("SeeReportInDueDebtMode",'<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=CREANCES-DETTES">','</a>').')';
|
||||
//if (isModEnabled('accounting')) {
|
||||
//$calcmode.='<br>('.$langs->trans("SeeReportInBookkeepingMode",'<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=BOOKKEEPINGCOLLECTED">','</a>').')';
|
||||
//}
|
||||
$periodlink = ($year_start ? "<a href='".$_SERVER["PHP_SELF"]."?year=".($year_start + $nbofyear - 2)."&modecompta=".$modecompta."'>".img_previous()."</a> <a href='".$_SERVER["PHP_SELF"]."?year=".($year_start + $nbofyear)."&modecompta=".$modecompta."'>".img_next()."</a>" : "");
|
||||
$description = $langs->trans("RulesCAIn");
|
||||
$description .= $langs->trans("DepositsAreIncluded");
|
||||
$builddate = dol_now();
|
||||
//$exportlink=$langs->trans("NotYetAvailable");
|
||||
} elseif ($modecompta == "BOOKKEEPING") {
|
||||
$name = $langs->trans("Turnover");
|
||||
$calcmode = $langs->trans("CalcModeBookkeeping");
|
||||
$calcmode .= '<br>('.$langs->trans("SeeReportInDueDebtMode", '{link1}', '{link2}').')';
|
||||
$calcmode = str_replace('{link1}', '<a class="bold" href="'.$_SERVER["PHP_SELF"].'?'.($param ? $param : 'year_start='.$year_start).'&modecompta=CREANCES-DETTES">', $calcmode);
|
||||
$calcmode = str_replace('{link2}', '</a>', $calcmode);
|
||||
//$calcmode.='<br>('.$langs->trans("SeeReportInInputOutputMode",'<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=RECETTES-DEPENSES">','</a>').')';
|
||||
$periodlink = ($year_start ? "<a href='".$_SERVER["PHP_SELF"]."?year=".($year_start + $nbofyear - 2)."&modecompta=".$modecompta."'>".img_previous()."</a> <a href='".$_SERVER["PHP_SELF"]."?year=".($year_start + $nbofyear)."&modecompta=".$modecompta."'>".img_next()."</a>" : "");
|
||||
$description = $langs->trans("RulesSalesTurnoverOfIncomeAccounts");
|
||||
$builddate = dol_now();
|
||||
//$exportlink=$langs->trans("NotYetAvailable");
|
||||
}
|
||||
$period = $form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0, 0, '', '', '', '', 1, '', '', 'tzserver');
|
||||
@ -200,6 +180,31 @@ $moreparam = array();
|
||||
if (!empty($modecompta)) {
|
||||
$moreparam['modecompta'] = $modecompta;
|
||||
}
|
||||
|
||||
// Define $calcmode line
|
||||
$calcmode = '';
|
||||
if ($modecompta == "RECETTES-DEPENSES" || $modecompta == "BOOKKEEINGCOLLECTED") {
|
||||
/*if (isModEnabled('accounting')) {
|
||||
$calcmode .= '<input type="radio" name="modecompta" id="modecompta3" value="BOOKKEEPINGCOLLECTED"'.($modecompta == 'BOOKKEEPINGCOLLECTED' ? ' checked="checked"' : '').'><label for="modecompta3"> '.$langs->trans("CalcModeBookkeeping").'</label>';
|
||||
$calcmode .= '<br>';
|
||||
}*/
|
||||
$calcmode .= '<input type="radio" name="modecompta" id="modecompta2" value="RECETTES-DEPENSES"'.($modecompta == 'RECETTES-DEPENSES' ? ' checked="checked"' : '').'><label for="modecompta2"> '.$langs->trans("CalcModeEngagement");
|
||||
if (isModEnabled('accounting')) {
|
||||
$calcmode .= ' <span class="opacitymedium hideonsmartphone">('.$langs->trans("CalcModeNoBookKeeping").')</span>';
|
||||
}
|
||||
$calcmode .= '</label>';
|
||||
} else {
|
||||
if (isModEnabled('accounting')) {
|
||||
$calcmode .= '<input type="radio" name="modecompta" id="modecompta3" value="BOOKKEEPING"'.($modecompta == 'BOOKKEEPING' ? ' checked="checked"' : '').'><label for="modecompta3"> '.$langs->trans("CalcModeBookkeeping").'</label>';
|
||||
$calcmode .= '<br>';
|
||||
}
|
||||
$calcmode .= '<input type="radio" name="modecompta" id="modecompta2" value="CREANCES-DETTES"'.($modecompta == 'CREANCES-DETTES' ? ' checked="checked"' : '').'><label for="modecompta2"> '.$langs->trans("CalcModeDebt");
|
||||
if (isModEnabled('accounting')) {
|
||||
$calcmode .= ' <span class="opacitymedium hideonsmartphone">('.$langs->trans("CalcModeNoBookKeeping").')</span>';
|
||||
}
|
||||
$calcmode .= '</label>';
|
||||
}
|
||||
|
||||
report_header($name, $namelink, $period, $periodlink, $description, $builddate, $exportlink, $moreparam, $calcmode);
|
||||
|
||||
if (isModEnabled('accounting') && $modecompta != 'BOOKKEEPING') {
|
||||
|
||||
@ -46,7 +46,7 @@ if (empty($year)) {
|
||||
} else {
|
||||
$year_current = $year;
|
||||
$month_current = dol_print_date(dol_now(), "%m");
|
||||
$year_start = $year - ($nbofyear - 1);
|
||||
$year_start = $year - $nbofyear + (getDolGlobalInt('SOCIETE_FISCAL_MONTH_START') > 1 ? 0 : 1);
|
||||
}
|
||||
$date_start = dol_mktime(0, 0, 0, $date_startmonth, $date_startday, $date_startyear, 'tzserver'); // We use timezone of server so report is same from everywhere
|
||||
$date_end = dol_mktime(23, 59, 59, $date_endmonth, $date_endday, $date_endyear, 'tzserver'); // We use timezone of server so report is same from everywhere
|
||||
@ -56,18 +56,16 @@ if (empty($date_start) || empty($date_end)) { // We define date_start and date_e
|
||||
$q = GETPOST("q") ?GETPOST("q") : 0;
|
||||
if ($q == 0) {
|
||||
// We define date_start and date_end
|
||||
$year_end = $year_start + ($nbofyear - 1);
|
||||
$month_start = GETPOSTISSET("month") ? GETPOST("month", 'int') : ($conf->global->SOCIETE_FISCAL_MONTH_START ? $conf->global->SOCIETE_FISCAL_MONTH_START : 1);
|
||||
$year_end = $year_start + $nbofyear - (getDolGlobalInt('SOCIETE_FISCAL_MONTH_START') > 1 ? 0 : 1);
|
||||
$month_start = GETPOSTISSET("month") ? GETPOST("month", 'int') : getDolGlobalInt('SOCIETE_FISCAL_MONTH_START', 1);
|
||||
if (!GETPOST('month')) {
|
||||
if (!GETPOST("year") && $month_start > $month_current) {
|
||||
if (!$year && $month_start > $month_current) {
|
||||
$year_start--;
|
||||
$year_end--;
|
||||
}
|
||||
$month_end = $month_start - 1;
|
||||
if ($month_end < 1) {
|
||||
$month_end = 12;
|
||||
} else {
|
||||
$year_end++;
|
||||
}
|
||||
} else {
|
||||
$month_end = $month_start;
|
||||
@ -107,7 +105,7 @@ $modecompta = $conf->global->ACCOUNTING_MODE;
|
||||
if (isModEnabled('accounting')) {
|
||||
$modecompta = 'BOOKKEEPING';
|
||||
}
|
||||
if (GETPOST("modecompta")) {
|
||||
if (GETPOST("modecompta", 'alpha')) {
|
||||
$modecompta = GETPOST("modecompta", 'alpha');
|
||||
}
|
||||
|
||||
@ -131,10 +129,14 @@ llxHeader();
|
||||
|
||||
$form = new Form($db);
|
||||
|
||||
$exportlink = '';
|
||||
$namelink = '';
|
||||
$builddate = dol_now();
|
||||
|
||||
// TODO Report from bookkeeping not yet available, so we switch on report on business events
|
||||
if ($modecompta == "BOOKKEEPING") {
|
||||
/*if ($modecompta == "BOOKKEEPING") {
|
||||
$modecompta = "CREANCES-DETTES";
|
||||
}
|
||||
}*/
|
||||
if ($modecompta == "BOOKKEEPINGCOLLECTED") {
|
||||
$modecompta = "RECETTES-DEPENSES";
|
||||
}
|
||||
@ -142,42 +144,26 @@ if ($modecompta == "BOOKKEEPINGCOLLECTED") {
|
||||
// Affiche en-tete du rapport
|
||||
if ($modecompta == "CREANCES-DETTES") {
|
||||
$name = $langs->trans("PurchaseTurnover");
|
||||
$calcmode = $langs->trans("CalcModeDebt");
|
||||
if (isModEnabled('accounting')) {
|
||||
$calcmode .= '<br>('.$langs->trans("SeeReportInBookkeepingMode", '{link1}', '{link2}').')';
|
||||
$calcmode = str_replace('{link1}', '<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=BOOKKEEPING">', $calcmode);
|
||||
$calcmode = str_replace('{link2}', '</a>', $calcmode);
|
||||
}
|
||||
$periodlink = ($year_start ? "<a href='".$_SERVER["PHP_SELF"]."?year=".($year_start + $nbofyear - 2)."&modecompta=".$modecompta."'>".img_previous()."</a> <a href='".$_SERVER["PHP_SELF"]."?year=".($year_start + $nbofyear)."&modecompta=".$modecompta."'>".img_next()."</a>" : "");
|
||||
$description = $langs->trans("RulesPurchaseTurnoverDue");
|
||||
//$exportlink=$langs->trans("NotYetAvailable");
|
||||
} elseif ($modecompta == "RECETTES-DEPENSES") {
|
||||
$name = $langs->trans("PurchaseTurnoverCollected");
|
||||
$calcmode = $langs->trans("CalcModeEngagement");
|
||||
$periodlink = ($year_start ? "<a href='".$_SERVER["PHP_SELF"]."?year=".($year_start + $nbofyear - 2)."&modecompta=".$modecompta."'>".img_previous()."</a> <a href='".$_SERVER["PHP_SELF"]."?year=".($year_start + $nbofyear)."&modecompta=".$modecompta."'>".img_next()."</a>" : "");
|
||||
$description = $langs->trans("RulesPurchaseTurnoverIn");
|
||||
//$exportlink=$langs->trans("NotYetAvailable");
|
||||
} elseif ($modecompta == "BOOKKEEPING") {
|
||||
$name = $langs->trans("PurchaseTurnover");
|
||||
$calcmode = $langs->trans("CalcModeBookkeeping");
|
||||
$calcmode .= '<br>('.$langs->trans("SeeReportInDueDebtMode", '{link1}', '{link2}').')';
|
||||
$calcmode = str_replace('{link1}', '<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=CREANCES-DETTES">', $calcmode);
|
||||
$calcmode = str_replace('{link2}', '</a>', $calcmode);
|
||||
$periodlink = ($year_start ? "<a href='".$_SERVER["PHP_SELF"]."?year=".($year_start + $nbofyear - 2)."&modecompta=".$modecompta."'>".img_previous()."</a> <a href='".$_SERVER["PHP_SELF"]."?year=".($year_start + $nbofyear)."&modecompta=".$modecompta."'>".img_next()."</a>" : "");
|
||||
$description = $langs->trans("RulesPurchaseTurnoverOfExpenseAccounts");
|
||||
//$exportlink=$langs->trans("NotYetAvailable");
|
||||
} elseif ($modecompta == "BOOKKEEPINGCOLLECTED") {
|
||||
$name = $langs->trans("PurchaseTurnoverCollected");
|
||||
$calcmode = $langs->trans("CalcModeBookkeeping");
|
||||
$calcmode .= '<br>('.$langs->trans("SeeReportInDueDebtMode", '{link1}', '{link2}').')';
|
||||
$calcmode = str_replace('{link1}', '<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=RECETTES-DEPENSES">', $calcmode);
|
||||
$calcmode = str_replace('{link2}', '</a>', $calcmode);
|
||||
$periodlink = ($year_start ? "<a href='".$_SERVER["PHP_SELF"]."?year=".($year_start + $nbofyear - 2)."&modecompta=".$modecompta."'>".img_previous()."</a> <a href='".$_SERVER["PHP_SELF"]."?year=".($year_start + $nbofyear)."&modecompta=".$modecompta."'>".img_next()."</a>" : "");
|
||||
$description = $langs->trans("RulesPurchaseTurnoverCollectedOfExpenseAccounts");
|
||||
//$exportlink=$langs->trans("NotYetAvailable");
|
||||
}
|
||||
|
||||
$builddate = dol_now();
|
||||
$period = $form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0, 0, '', '', '', '', 1, '', '', 'tzserver');
|
||||
$period .= ' - ';
|
||||
$period .= $form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0, 0, '', '', '', '', 1, '', '', 'tzserver');
|
||||
@ -187,9 +173,32 @@ if (!empty($modecompta)) {
|
||||
$moreparam['modecompta'] = $modecompta;
|
||||
}
|
||||
|
||||
$exportlink = '';
|
||||
// Define $calcmode line
|
||||
$calcmode = '';
|
||||
if ($modecompta == "RECETTES-DEPENSES" || $modecompta == "BOOKKEEPINGCOLLECTED") {
|
||||
/*if (isModEnabled('accounting')) {
|
||||
$calcmode .= '<input type="radio" name="modecompta" id="modecompta3" value="BOOKKEEPINGCOLLECTED"'.($modecompta == 'BOOKKEEPINGCOLLECTED' ? ' checked="checked"' : '').'><label for="modecompta3"> '.$langs->trans("CalcModeBookkeeping").'</label>';
|
||||
$calcmode .= '<br>';
|
||||
}*/
|
||||
$calcmode .= '<input type="radio" name="modecompta" id="modecompta2" value="RECETTES-DEPENSES"'.($modecompta == 'RECETTES-DEPENSES' ? ' checked="checked"' : '').'><label for="modecompta2"> '.$langs->trans("CalcModeEngagement");
|
||||
if (isModEnabled('accounting')) {
|
||||
$calcmode .= ' <span class="opacitymedium hideonsmartphone">('.$langs->trans("CalcModeNoBookKeeping").')</span>';
|
||||
}
|
||||
$calcmode .= '</label>';
|
||||
} else {
|
||||
if (isModEnabled('accounting')) {
|
||||
$calcmode .= '<input type="radio" name="modecompta" id="modecompta3" value="BOOKKEEPING"'.($modecompta == 'BOOKKEEPING' ? ' checked="checked"' : '').'><label for="modecompta3"> '.$langs->trans("CalcModeBookkeeping").'</label>';
|
||||
$calcmode .= '<br>';
|
||||
}
|
||||
$calcmode .= '<input type="radio" name="modecompta" id="modecompta2" value="CREANCES-DETTES"'.($modecompta == 'CREANCES-DETTES' ? ' checked="checked"' : '').'><label for="modecompta2"> '.$langs->trans("CalcModeEngagement");
|
||||
if (isModEnabled('accounting')) {
|
||||
$calcmode .= ' <span class="opacitymedium hideonsmartphone">('.$langs->trans("CalcModeNoBookKeeping").')</span>';
|
||||
}
|
||||
$calcmode .= '</label>';
|
||||
}
|
||||
|
||||
report_header($name, '', $period, $periodlink, $description, $builddate, $exportlink, $moreparam, $calcmode);
|
||||
|
||||
report_header($name, $namelink, $period, $periodlink, $description, $builddate, $exportlink, $moreparam, $calcmode);
|
||||
|
||||
if (isModEnabled('accounting') && $modecompta != 'BOOKKEEPING') {
|
||||
print info_admin($langs->trans("WarningReportNotReliable"), 0, 0, 1);
|
||||
@ -242,14 +251,19 @@ $sql .= " ORDER BY dm";
|
||||
|
||||
$minyearmonth = $maxyearmonth = 0;
|
||||
|
||||
$cum = array();
|
||||
$cum_ht = array();
|
||||
$total_ht = array();
|
||||
$total = array();
|
||||
|
||||
$result = $db->query($sql);
|
||||
if ($result) {
|
||||
$num = $db->num_rows($result);
|
||||
$i = 0;
|
||||
while ($i < $num) {
|
||||
$obj = $db->fetch_object($result);
|
||||
$cum_ht[$obj->dm] = !empty($obj->amount) ? $obj->amount : 0;
|
||||
$cum[$obj->dm] = $obj->amount_ttc;
|
||||
$cum_ht[$obj->dm] = empty($obj->amount) ? 0 : $obj->amount;
|
||||
$cum[$obj->dm] = empty($obj->amount_ttc) ? 0 : $obj->amount_ttc;
|
||||
if ($obj->amount_ttc) {
|
||||
$minyearmonth = ($minyearmonth ? min($minyearmonth, $obj->dm) : $obj->dm);
|
||||
$maxyearmonth = max($maxyearmonth, $obj->dm);
|
||||
@ -348,7 +362,7 @@ for ($mois = 1 + $nb_mois_decalage; $mois <= 12 + $nb_mois_decalage; $mois++) {
|
||||
|
||||
if ($annee >= $year_start) { // We ignore $annee < $year_start, we loop on it to be able to make delta, nothing is output.
|
||||
if ($modecompta == 'CREANCES-DETTES') {
|
||||
// Valeur CA du mois w/o VAT
|
||||
// Value turnover of month w/o VAT
|
||||
print '<td class="right">';
|
||||
if (!empty($cum_ht[$case])) {
|
||||
$now_show_delta = 1; // On a trouve le premier mois de la premiere annee generant du chiffre.
|
||||
@ -363,7 +377,7 @@ for ($mois = 1 + $nb_mois_decalage; $mois <= 12 + $nb_mois_decalage; $mois++) {
|
||||
print "</td>";
|
||||
}
|
||||
|
||||
// Valeur CA du mois
|
||||
// Value turnover of month
|
||||
print '<td class="right">';
|
||||
if (!empty($cum[$case])) {
|
||||
$now_show_delta = 1; // On a trouve le premier mois de la premiere annee generant du chiffre.
|
||||
@ -383,7 +397,7 @@ for ($mois = 1 + $nb_mois_decalage; $mois <= 12 + $nb_mois_decalage; $mois++) {
|
||||
}
|
||||
print "</td>";
|
||||
|
||||
// Pourcentage du mois
|
||||
// Percentage of month
|
||||
if ($annee_decalage > $minyear && $case <= $casenow) {
|
||||
if (!empty($cum[$caseprev]) && !empty($cum[$case])) {
|
||||
$percent = (round(($cum[$case] - $cum[$caseprev]) / $cum[$caseprev], 4) * 100);
|
||||
@ -439,7 +453,9 @@ for ($annee = $year_start; $annee <= $year_end; $annee++) {
|
||||
if ($modecompta == 'CREANCES-DETTES') {
|
||||
// Montant total HT
|
||||
if ($total_ht[$annee] || ($annee >= $minyear && $annee <= max($nowyear, $maxyear))) {
|
||||
print '<td class="nowrap right">'.($total_ht[$annee] ?price($total_ht[$annee]) : "0")."</td>";
|
||||
print '<td class="nowrap right">';
|
||||
print ($total_ht[$annee] ?price($total_ht[$annee]) : "0");
|
||||
print "</td>";
|
||||
} else {
|
||||
print '<td> </td>';
|
||||
}
|
||||
@ -456,20 +472,22 @@ for ($annee = $year_start; $annee <= $year_end; $annee++) {
|
||||
if ($annee > $minyear && $annee <= max($nowyear, $maxyear)) {
|
||||
if ($total[$annee - 1] && $total[$annee]) {
|
||||
$percent = (round(($total[$annee] - $total[$annee - 1]) / $total[$annee - 1], 4) * 100);
|
||||
print '<td class="nowrap borderrightlight right">'.($percent >= 0 ? "+$percent" : "$percent").'%</td>';
|
||||
print '<td class="nowrap borderrightlight right">';
|
||||
print ($percent >= 0 ? "+$percent" : "$percent").'%';
|
||||
print '</td>';
|
||||
}
|
||||
if ($total[$annee - 1] && !$total[$annee]) {
|
||||
if (!empty($total[$annee - 1]) && empty($total[$annee])) {
|
||||
print '<td class="borderrightlight right">-100%</td>';
|
||||
}
|
||||
if (!$total[$annee - 1] && $total[$annee]) {
|
||||
if (empty($total[$annee - 1]) && !empty($total[$annee])) {
|
||||
print '<td class="borderrightlight right">+'.$langs->trans('Inf').'%</td>';
|
||||
}
|
||||
if (!$total[$annee - 1] && !$total[$annee]) {
|
||||
if (empty($total[$annee - 1]) && empty($total[$annee])) {
|
||||
print '<td class="borderrightlight right">+0%</td>';
|
||||
}
|
||||
} else {
|
||||
print '<td class="borderrightlight right">';
|
||||
if ($total[$annee] || ($minyear <= $annee && $annee <= max($nowyear, $maxyear))) {
|
||||
if (!empty($total[$annee]) || ($minyear <= $annee && $annee <= max($nowyear, $maxyear))) {
|
||||
print '-';
|
||||
} else {
|
||||
print ' ';
|
||||
|
||||
@ -1504,7 +1504,7 @@ while ($i < $imaxinloop) {
|
||||
|
||||
// Alias name
|
||||
if (!empty($arrayfields['s.name_alias']['checked'])) {
|
||||
print '<td class="nocellnopadd">';
|
||||
print '<td class="tdoverflowmax100" title="'.dol_escape_htmltag($obj->alias).'">';
|
||||
print dol_escape_htmltag($obj->alias);
|
||||
print '</td>';
|
||||
if (!$i) {
|
||||
|
||||
@ -19,6 +19,8 @@
|
||||
/**
|
||||
* \file htdocs/core/ajax/fileupload.php
|
||||
* \brief File to return Ajax response on file upload
|
||||
*
|
||||
* Option MAIN_USE_JQUERY_FILEUPLOAD must be enabled to have this feature working. Use is NOT secured !
|
||||
*/
|
||||
|
||||
if (!defined('NOTOKENRENEWAL')) {
|
||||
|
||||
@ -36,7 +36,7 @@ if (!defined('NOREQUIREAJAX')) {
|
||||
if (!defined('NOREQUIRESOC')) {
|
||||
define('NOREQUIRESOC', '1');
|
||||
}
|
||||
// We need langs because the getRandomPassword may use user language to define some rules of pass generation
|
||||
// We need langs because the getRandomPassword may use the user language to define some rules of pass generation
|
||||
/*if (!defined('NOREQUIRETRAN')) {
|
||||
define('NOREQUIRETRAN', '1');
|
||||
}*/
|
||||
|
||||
@ -4,6 +4,7 @@
|
||||
* Copyright (C) 2015 Frederic France <frederic.france@free.fr>
|
||||
* Copyright (C) 2016 Juan José Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2020 Pierre Ardoin <mapiolca@me.com>
|
||||
* Copyright (C) 2023 Gauthier VERDOL <gauthier.verdol@atm-consulting.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
|
||||
@ -119,7 +120,7 @@ class box_validated_projects extends ModeleBoxes
|
||||
if ($projectsListId) {
|
||||
$sql .= ' AND p.rowid IN ('.$this->db->sanitize($projectsListId).')'; // Only projects that are allowed
|
||||
}
|
||||
$sql .= " AND t.rowid NOT IN (SELECT fk_task FROM ".MAIN_DB_PREFIX."projet_task_time WHERE fk_user = ".((int) $user->id).")";
|
||||
$sql .= " AND t.rowid NOT IN (SELECT fk_element FROM ".MAIN_DB_PREFIX."element_time WHERE elementtype = 'task' AND fk_user = ".((int) $user->id).")";
|
||||
$sql .= " GROUP BY p.rowid, p.ref, p.fk_soc, p.dateo";
|
||||
$sql .= " ORDER BY p.dateo ASC";
|
||||
|
||||
|
||||
@ -32,6 +32,7 @@
|
||||
|
||||
use OAuth\Common\Storage\DoliStorage;
|
||||
use OAuth\Common\Consumer\Credentials;
|
||||
|
||||
/**
|
||||
* Class to send emails (with attachments or not)
|
||||
* Usage: $mailfile = new CMailFile($subject,$sendto,$replyto,$message,$filepath,$mimetype,$filename,$cc,$ccc,$deliveryreceipt,$msgishtml,$errors_to,$css,$trackid,$moreinheader,$sendcontext,$replyto);
|
||||
@ -171,6 +172,10 @@ class CMailFile
|
||||
{
|
||||
global $conf, $dolibarr_main_data_root, $user;
|
||||
|
||||
dol_syslog("CMailFile::CMailfile: charset=".$conf->file->character_set_client." from=$from, to=$to, addr_cc=$addr_cc, addr_bcc=$addr_bcc, errors_to=$errors_to, replyto=$replyto trackid=$trackid sendcontext=$sendcontext", LOG_DEBUG);
|
||||
dol_syslog("CMailFile::CMailfile: subject=".$subject.", deliveryreceipt=".$deliveryreceipt.", msgishtml=".$msgishtml, LOG_DEBUG);
|
||||
|
||||
|
||||
// Clean values of $mimefilename_list
|
||||
if (is_array($mimefilename_list)) {
|
||||
foreach ($mimefilename_list as $key => $val) {
|
||||
@ -214,9 +219,6 @@ class CMailFile
|
||||
// On defini alternative_boundary
|
||||
$this->alternative_boundary = 'mul_'.dol_hash(uniqid("dolibarr3"), 3); // Force md5 hash (does not contains special chars)
|
||||
|
||||
dol_syslog("CMailFile::CMailfile: sendmode=".$this->sendmode." charset=".$conf->file->character_set_client." from=$from, to=$to, addr_cc=$addr_cc, addr_bcc=$addr_bcc, errors_to=$errors_to, replyto=$replyto trackid=$trackid sendcontext=$sendcontext upload_dir_tmp=$upload_dir_tmp", LOG_DEBUG);
|
||||
dol_syslog("CMailFile::CMailfile: subject=".$subject.", deliveryreceipt=".$deliveryreceipt.", msgishtml=".$msgishtml, LOG_DEBUG);
|
||||
|
||||
if (empty($subject)) {
|
||||
dol_syslog("CMailFile::CMailfile: Try to send an email with empty subject");
|
||||
$this->error = 'ErrorSubjectIsRequired';
|
||||
@ -367,6 +369,8 @@ class CMailFile
|
||||
}
|
||||
}
|
||||
|
||||
dol_syslog("CMailFile::CMailfile: sendmode=".$this->sendmode." addr_bcc=$addr_bcc, replyto=$replyto", LOG_DEBUG);
|
||||
|
||||
// We set all data according to choosed sending method.
|
||||
// We also set a value for ->msgid
|
||||
if ($this->sendmode == 'mail') {
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
* Copyright (C) 2017 Rui Strecht <rui.strecht@aliartalentos.com>
|
||||
* Copyright (C) 2018-2021 Frédéric France <frederic.france@netlogic.fr>
|
||||
* Copyright (C) 2018 Josep Lluís Amador <joseplluis@lliuretic.cat>
|
||||
* Copyright (C) 2021 Gauthier VERDOL <gauthier.verdol@atm-consulting.fr>
|
||||
* Copyright (C) 2023 Gauthier VERDOL <gauthier.verdol@atm-consulting.fr>
|
||||
* Copyright (C) 2021 Grégory Blémand <gregory.blemand@atm-consulting.fr>
|
||||
* Copyright (C) 2023 Lenin Rivas <lenin.rivas777@gmail.com>
|
||||
*
|
||||
@ -2089,10 +2089,6 @@ abstract class CommonObject
|
||||
$id_field = 'rowid';
|
||||
}
|
||||
|
||||
$error = 0;
|
||||
|
||||
$this->db->begin();
|
||||
|
||||
// Special case
|
||||
if ($table == 'product' && $field == 'note_private') {
|
||||
$field = 'note';
|
||||
@ -2101,6 +2097,32 @@ abstract class CommonObject
|
||||
$fk_user_field = 'fk_user_mod';
|
||||
}
|
||||
|
||||
if ($trigkey) {
|
||||
$oldvalue = null;
|
||||
|
||||
$sql = "SELECT " . $field;
|
||||
$sql .= " FROM " . MAIN_DB_PREFIX . $table;
|
||||
$sql .= " WHERE " . $id_field . " = " . ((int) $id);
|
||||
|
||||
$resql = $this->db->query($sql);
|
||||
if ($resql) {
|
||||
if ($obj = $this->db->fetch_object($resql)) {
|
||||
if ($format == 'date') {
|
||||
$oldvalue = $this->db->jdate($obj->$field);
|
||||
} else {
|
||||
$oldvalue = $obj->$field;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$this->error = $this->db->lasterror();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
$error = 0;
|
||||
|
||||
$this->db->begin();
|
||||
|
||||
$sql = "UPDATE ".$this->db->prefix().$table." SET ";
|
||||
|
||||
if ($format == 'text') {
|
||||
@ -2133,6 +2155,11 @@ abstract class CommonObject
|
||||
} else {
|
||||
$result = $this->fetchCommon($id);
|
||||
}
|
||||
$this->oldcopy = clone $this;
|
||||
if (property_exists($this->oldcopy, $field)) {
|
||||
$this->oldcopy->$field = $oldvalue;
|
||||
}
|
||||
|
||||
if ($result >= 0) {
|
||||
$result = $this->call_trigger($trigkey, (!empty($fuser) && is_object($fuser)) ? $fuser : $user); // This may set this->errors
|
||||
}
|
||||
@ -4637,6 +4664,9 @@ abstract class CommonObject
|
||||
if (!empty($element['parent']) && !empty($element['parentkey'])) {
|
||||
$sql.= " AND c.".$element['parentkey']." = p.rowid";
|
||||
}
|
||||
if (!empty($element['parent']) && !empty($element['parenttypefield']) && !empty($element['parenttypevalue'])) {
|
||||
$sql.= " AND c.".$element['parenttypefield']." = '".$this->db->escape($element['parenttypevalue'])."'";
|
||||
}
|
||||
if (!empty($entity)) {
|
||||
if (!empty($element['parent']) && !empty($element['parentkey'])) {
|
||||
$sql.= " AND p.entity = ".((int) $entity);
|
||||
@ -6154,13 +6184,15 @@ abstract class CommonObject
|
||||
|
||||
// If field is a computed field, value must become result of compute (regardless of whether a row exists
|
||||
// in the element's extrafields table)
|
||||
foreach ($extrafields->attributes[$this->table_element]['label'] as $key => $val) {
|
||||
if (!empty($extrafields->attributes[$this->table_element]) && !empty($extrafields->attributes[$this->table_element]['computed'][$key])) {
|
||||
//var_dump($conf->disable_compute);
|
||||
if (empty($conf->disable_compute)) {
|
||||
global $objectoffield; // We set a global variable to $objectoffield so
|
||||
$objectoffield = $this; // we can use it inside computed formula
|
||||
$this->array_options["options_".$key] = dol_eval($extrafields->attributes[$this->table_element]['computed'][$key], 1, 0, '');
|
||||
if (is_array($extrafields->attributes[$this->table_element]['label'])) {
|
||||
foreach ($extrafields->attributes[$this->table_element]['label'] as $key => $val) {
|
||||
if (!empty($extrafields->attributes[$this->table_element]) && !empty($extrafields->attributes[$this->table_element]['computed'][$key])) {
|
||||
//var_dump($conf->disable_compute);
|
||||
if (empty($conf->disable_compute)) {
|
||||
global $objectoffield; // We set a global variable to $objectoffield so
|
||||
$objectoffield = $this; // we can use it inside computed formula
|
||||
$this->array_options['options_' . $key] = dol_eval($extrafields->attributes[$this->table_element]['computed'][$key], 1, 0, '');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1144,7 +1144,7 @@ class DolGraph
|
||||
if (isset($this->type[$firstlot])) {
|
||||
$cssfordiv .= ' dolgraphchar' . $this->type[$firstlot];
|
||||
}
|
||||
$this->stringtoshow .= '<div id="placeholder_' . $tag . '" style="min-height: ' . $this->height . (strpos($this->height, '%') > 0 ? '' : 'px') . '; width:' . $this->width . (strpos($this->width, '%') > 0 ? '' : 'px') . ';" class="' . $cssfordiv . ' dolgraph' . (empty($dolxaxisvertical) ? '' : ' ' . $dolxaxisvertical) . (empty($this->cssprefix) ? '' : ' dolgraph' . $this->cssprefix) . ' center"><canvas id="canvas_' . $tag . '"></canvas></div>' . "\n";
|
||||
$this->stringtoshow .= '<div id="placeholder_' . $tag . '" style="min-height: ' . $this->height . (strpos($this->height, '%') > 0 ? '' : 'px').'; max-height: ' . (strpos($this->height, '%') > 0 ? $this->height : ($this->height + 100) . 'px').'; width:' . $this->width . (strpos($this->width, '%') > 0 ? '' : 'px') . ';" class="' . $cssfordiv . ' dolgraph' . (empty($dolxaxisvertical) ? '' : ' ' . $dolxaxisvertical) . (empty($this->cssprefix) ? '' : ' dolgraph' . $this->cssprefix) . ' center"><canvas id="canvas_' . $tag . '"></canvas></div>' . "\n";
|
||||
|
||||
$this->stringtoshow .= '<script nonce="'.getNonce().'" id="' . $tag . '">' . "\n";
|
||||
$i = $firstlot;
|
||||
|
||||
@ -19,6 +19,8 @@
|
||||
/**
|
||||
* \file htdocs/core/class/fileupload.class.php
|
||||
* \brief File to return Ajax response on file upload
|
||||
*
|
||||
* Option MAIN_USE_JQUERY_FILEUPLOAD must be enabled to have feature working. Use is NOT secured !
|
||||
*/
|
||||
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||
@ -110,36 +112,40 @@ class FileUpload
|
||||
$dir_output = $conf->$element->dir_output;
|
||||
}
|
||||
|
||||
dol_include_once('/'.$pathname.'/class/'.$filename.'.class.php');
|
||||
// If pathname and filename are null then we can still upload files
|
||||
// IF we have specified upload_dir on $this->options
|
||||
if ($pathname !== null && $filename !== null) {
|
||||
dol_include_once('/'.$pathname.'/class/'.$filename.'.class.php');
|
||||
|
||||
$classname = ucfirst($filename);
|
||||
$classname = ucfirst($filename);
|
||||
|
||||
if ($element == 'order_supplier') {
|
||||
$classname = 'CommandeFournisseur';
|
||||
} elseif ($element == 'invoice_supplier') {
|
||||
$classname = 'FactureFournisseur';
|
||||
}
|
||||
|
||||
$object = new $classname($db);
|
||||
|
||||
$object->fetch($fk_element);
|
||||
if (!empty($parentForeignKey)) {
|
||||
dol_include_once('/'.$parentElement.'/class/'.$parentObject.'.class.php');
|
||||
$parent = new $parentClass($db);
|
||||
$parent->fetch($object->$parentForeignKey);
|
||||
if (!empty($parent->socid)) {
|
||||
$parent->fetch_thirdparty();
|
||||
if ($element == 'order_supplier') {
|
||||
$classname = 'CommandeFournisseur';
|
||||
} elseif ($element == 'invoice_supplier') {
|
||||
$classname = 'FactureFournisseur';
|
||||
}
|
||||
$object->$parentObject = clone $parent;
|
||||
} else {
|
||||
$object->fetch_thirdparty();
|
||||
}
|
||||
|
||||
$object_ref = dol_sanitizeFileName($object->ref);
|
||||
if ($element == 'invoice_supplier') {
|
||||
$object_ref = get_exdir($object->id, 2, 0, 0, $object, 'invoice_supplier').$object_ref;
|
||||
} elseif ($element == 'project_task') {
|
||||
$object_ref = $object->project->ref.'/'.$object_ref;
|
||||
$object = new $classname($db);
|
||||
|
||||
$object->fetch($fk_element);
|
||||
if (!empty($parentForeignKey)) {
|
||||
dol_include_once('/'.$parentElement.'/class/'.$parentObject.'.class.php');
|
||||
$parent = new $parentClass($db);
|
||||
$parent->fetch($object->$parentForeignKey);
|
||||
if (!empty($parent->socid)) {
|
||||
$parent->fetch_thirdparty();
|
||||
}
|
||||
$object->$parentObject = clone $parent;
|
||||
} else {
|
||||
$object->fetch_thirdparty();
|
||||
}
|
||||
|
||||
$object_ref = dol_sanitizeFileName($object->ref);
|
||||
if ($element == 'invoice_supplier') {
|
||||
$object_ref = get_exdir($object->id, 2, 0, 0, $object, 'invoice_supplier').$object_ref;
|
||||
} elseif ($element == 'project_task') {
|
||||
$object_ref = $object->project->ref.'/'.$object_ref;
|
||||
}
|
||||
}
|
||||
|
||||
$this->options = array(
|
||||
@ -201,6 +207,21 @@ class FileUpload
|
||||
if ($options) {
|
||||
$this->options = array_replace_recursive($this->options, $options);
|
||||
}
|
||||
|
||||
// At this point we should have a valid upload_dir in options
|
||||
//if ($pathname === null && $filename === null) { // OR or AND???
|
||||
if ($pathname === null || $filename === null) {
|
||||
if (!key_exists("upload_dir", $this->options)) {
|
||||
setEventMessage('If $fk_element = null or $element = null you must specify upload_dir on $options', 'errors');
|
||||
throw new Exception('If $fk_element = null or $element = null you must specify upload_dir on $options');
|
||||
} elseif (!is_dir($this->options['upload_dir'])) {
|
||||
setEventMessage('The directory '.$this->options['upload_dir'].' doesn\'t exists', 'errors');
|
||||
throw new Exception('The directory '.$this->options['upload_dir'].' doesn\'t exists');
|
||||
} elseif (!is_writable($this->options['upload_dir'])) {
|
||||
setEventMessage('The directory '.$this->options['upload_dir'].' is not writable', 'errors');
|
||||
throw new Exception('The directory '.$this->options['upload_dir'].' is not writable');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -1346,6 +1346,8 @@ class Form
|
||||
$out .= img_picto($langs->trans("Search"), 'search');
|
||||
}
|
||||
|
||||
$out .= ajax_event($htmlname, $events);
|
||||
|
||||
$out .= ajax_autocompleter($selected, $htmlname, DOL_URL_ROOT . '/societe/ajax/company.php', $urloption, $conf->global->COMPANY_USE_SEARCH_TO_SELECT, 0, $ajaxoptions);
|
||||
} else {
|
||||
// Immediate load of all database
|
||||
|
||||
@ -194,8 +194,6 @@ class FormActions
|
||||
$title = $langs->trans('ActionsOnBill');
|
||||
} elseif ($typeelement == 'invoice_supplier' || $typeelement == 'supplier_invoice') {
|
||||
$title = $langs->trans('ActionsOnBill');
|
||||
} elseif ($typeelement == 'propal') {
|
||||
$title = $langs->trans('ActionsOnPropal');
|
||||
} elseif ($typeelement == 'supplier_proposal') {
|
||||
$title = $langs->trans('ActionsOnSupplierProposal');
|
||||
} elseif ($typeelement == 'order') {
|
||||
@ -204,14 +202,6 @@ class FormActions
|
||||
$title = $langs->trans('ActionsOnOrder');
|
||||
} elseif ($typeelement == 'shipping') {
|
||||
$title = $langs->trans('ActionsOnShipping');
|
||||
} elseif ($typeelement == 'fichinter') {
|
||||
$title = $langs->trans('ActionsOnFicheInter');
|
||||
} elseif ($typeelement == 'project') {
|
||||
$title = $langs->trans('LatestLinkedEvents', $max ? $max : '');
|
||||
} elseif ($typeelement == 'task') {
|
||||
$title = $langs->trans('LatestLinkedEvents', $max ? $max : '');
|
||||
} elseif ($typeelement == 'member') {
|
||||
$title = $langs->trans('LatestLinkedEvents', $max ? $max : '');
|
||||
} else {
|
||||
$title = $langs->trans("LatestLinkedEvents", $max ? $max : '');
|
||||
}
|
||||
|
||||
@ -436,7 +436,7 @@ class FormTicket
|
||||
$toolbarname = 'dolibarr_notes';
|
||||
if ($this->ispublic) {
|
||||
$toolbarname = 'dolibarr_details';
|
||||
print '<div class="warning">'.(getDolGlobalString("TICKET_PUBLIC_TEXT_HELP_MESSAGE", $langs->trans('TicketPublicPleaseBeAccuratelyDescribe'))).'</div>';
|
||||
print '<div class="warning hideonsmartphone">'.(getDolGlobalString("TICKET_PUBLIC_TEXT_HELP_MESSAGE", $langs->trans('TicketPublicPleaseBeAccuratelyDescribe'))).'</div>';
|
||||
}
|
||||
include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
|
||||
$uselocalbrowser = true;
|
||||
@ -464,7 +464,7 @@ class FormTicket
|
||||
|
||||
if (count($cate_arbo)) {
|
||||
// Categories
|
||||
print '<tr><td>'.$langs->trans("Categories").'</td><td colspan="3">';
|
||||
print '<tr><td class="wordbreak">'.$langs->trans("Categories").'</td><td>';
|
||||
print img_picto('', 'category', 'class="pictofixedwidth"').$form->multiselectarray('categories', $cate_arbo, GETPOST('categories', 'array'), '', 0, 'quatrevingtpercent widthcentpercentminusx', 0, 0);
|
||||
print "</td></tr>";
|
||||
}
|
||||
|
||||
1134
htdocs/core/class/timespent.class.php
Executable file
1134
htdocs/core/class/timespent.class.php
Executable file
File diff suppressed because it is too large
Load Diff
@ -431,7 +431,7 @@ foreach ($newarrayoftype as $tmpkey => $tmpval) {
|
||||
$newarrayoftype[$tmpkey]['label'] = img_picto('', $tmpval['picto'], 'class="pictofixedwidth"').$langs->trans($tmpval['label']);
|
||||
}
|
||||
|
||||
print '<div class="liste_titre liste_titre_bydiv centpercent">';
|
||||
print '<div class="liste_titre liste_titre_bydiv liste_titre_bydiv_inlineblock centpercent">';
|
||||
|
||||
// Select object
|
||||
print '<div class="divadvancedsearchfield center floatnone">';
|
||||
@ -863,7 +863,7 @@ if ($sql) {
|
||||
$xlabel = $object->fields[$xvalwithoutprefix]['arrayofkeyval'][$obj->$fieldforxkey];
|
||||
}
|
||||
|
||||
$labeltouse = (($xlabel || $xlabel == '0') ? dol_trunc($xlabel, 20, 'middle') : ($xlabel === '' ? $langs->trans("Empty") : $langs->trans("NotDefined")));
|
||||
$labeltouse = (($xlabel || $xlabel == '0') ? dol_trunc($xlabel, 20, 'middle') : ($xlabel === '' ? $langs->transnoentitiesnoconv("Empty") : $langs->transnoentitiesnoconv("NotDefined")));
|
||||
$xarrayforallseries = array('label' => $labeltouse);
|
||||
foreach ($search_measures as $key => $val) {
|
||||
$fieldfory = 'y_'.$key;
|
||||
|
||||
@ -526,24 +526,46 @@ function ajax_combobox($htmlname, $events = array(), $minLengthToAutocomplete =
|
||||
}
|
||||
$msg .= ';'."\n";
|
||||
|
||||
if (is_array($events) && count($events)) { // If an array of js events to do were provided.
|
||||
$msg .= '
|
||||
$msg .= '});'."\n";
|
||||
$msg .= "</script>\n";
|
||||
|
||||
$msg .= ajax_event($htmlname, $events);
|
||||
|
||||
return $msg;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Add event management script.
|
||||
*
|
||||
* @param string $htmlname Name of html select field ('myid' or '.myclass')
|
||||
* @param array $events Add some Ajax events option on change of $htmlname component to call ajax to autofill a HTML element (select#htmlname and #inputautocompletehtmlname)
|
||||
* Example: array(array('method'=>'getContacts', 'url'=>dol_buildpath('/core/ajax/contacts.php',1), 'htmlname'=>'contactid', 'params'=>array('add-customer-contact'=>'disabled')))
|
||||
* @return string Return JS string to manage event
|
||||
*/
|
||||
function ajax_event($htmlname, $events)
|
||||
{
|
||||
$out = '';
|
||||
|
||||
if (is_array($events) && count($events)) { // If an array of js events to do were provided.
|
||||
$out = '<!-- JS code to manage event for id = ' . $htmlname . ' -->
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
jQuery("#'.$htmlname.'").change(function () {
|
||||
var obj = '.json_encode($events).';
|
||||
var obj = '.json_encode($events) . ';
|
||||
$.each(obj, function(key,values) {
|
||||
if (values.method.length) {
|
||||
runJsCodeForEvent'.$htmlname.'(values);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function runJsCodeForEvent'.$htmlname.'(obj) {
|
||||
var id = $("#'.$htmlname.'").val();
|
||||
var method = obj.method;
|
||||
var url = obj.url;
|
||||
var htmlname = obj.htmlname;
|
||||
var showempty = obj.showempty;
|
||||
console.log("Run runJsCodeForEvent-'.$htmlname.' from ajax_combobox id="+id+" method="+method+" showempty="+showempty+" url="+url+" htmlname="+htmlname);
|
||||
console.log("Run runJsCodeForEvent-'.$htmlname.' from ajax_combobox id="+id+" method="+method+" showempty="+showempty+" url="+url+" htmlname="+htmlname);
|
||||
$.getJSON(url,
|
||||
{
|
||||
action: method,
|
||||
@ -567,7 +589,7 @@ function ajax_combobox($htmlname, $events = array(), $minLengthToAutocomplete =
|
||||
var selecthtml_str = response.value;
|
||||
var selecthtml_dom=$.parseHTML(selecthtml_str);
|
||||
if (typeof(selecthtml_dom[0][0]) !== \'undefined\') {
|
||||
$("#inputautocomplete"+htmlname).val(selecthtml_dom[0][0].innerHTML);
|
||||
$("#inputautocomplete"+htmlname).val(selecthtml_dom[0][0].innerHTML);
|
||||
}
|
||||
} else {
|
||||
$("#inputautocomplete"+htmlname).val("");
|
||||
@ -575,15 +597,15 @@ function ajax_combobox($htmlname, $events = array(), $minLengthToAutocomplete =
|
||||
$("select#" + htmlname).change(); /* Trigger event change */
|
||||
}
|
||||
);
|
||||
}';
|
||||
}
|
||||
});
|
||||
</script>';
|
||||
}
|
||||
|
||||
$msg .= '});'."\n";
|
||||
$msg .= "</script>\n";
|
||||
|
||||
return $msg;
|
||||
return $out;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* On/off button for constant
|
||||
*
|
||||
|
||||
@ -120,9 +120,38 @@ function fichinter_prepare_head($object)
|
||||
$head[$h][2] = 'documents';
|
||||
$h++;
|
||||
|
||||
$head[$h][0] = DOL_URL_ROOT.'/fichinter/info.php?id='.$object->id;
|
||||
$head[$h][1] = $langs->trans('Info');
|
||||
$head[$h][2] = 'info';
|
||||
$head[$h][0] = DOL_URL_ROOT.'/fichinter/agenda.php?id='.$object->id;
|
||||
$head[$h][1] = $langs->trans('Events');
|
||||
if (isModEnabled('agenda')&& (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read))) {
|
||||
$nbEvent = 0;
|
||||
// Enable caching of thirdparty count actioncomm
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/memory.lib.php';
|
||||
$cachekey = 'count_events_fichinter_'.$object->id;
|
||||
$dataretrieved = dol_getcache($cachekey);
|
||||
if (!is_null($dataretrieved)) {
|
||||
$nbEvent = $dataretrieved;
|
||||
} else {
|
||||
$sql = "SELECT COUNT(id) as nb";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."actioncomm";
|
||||
$sql .= " WHERE fk_element = ".((int) $object->id);
|
||||
$sql .= " AND elementtype = 'fichinter'";
|
||||
$resql = $db->query($sql);
|
||||
if ($resql) {
|
||||
$obj = $db->fetch_object($resql);
|
||||
$nbEvent = $obj->nb;
|
||||
} else {
|
||||
dol_syslog('Failed to count actioncomm '.$db->lasterror(), LOG_ERR);
|
||||
}
|
||||
dol_setcache($cachekey, $nbEvent, 120); // If setting cache fails, this is not a problem, so we do not test result.
|
||||
}
|
||||
|
||||
$head[$h][1] .= '/';
|
||||
$head[$h][1] .= $langs->trans("Agenda");
|
||||
if ($nbEvent > 0) {
|
||||
$head[$h][1] .= '<span class="badge marginleftonlyshort">'.$nbEvent.'</span>';
|
||||
}
|
||||
}
|
||||
$head[$h][2] = 'agenda';
|
||||
$h++;
|
||||
|
||||
complete_head_from_modules($conf, $langs, $object, $head, $h, 'intervention', 'add', 'external');
|
||||
|
||||
@ -5435,6 +5435,7 @@ function print_barre_liste($titre, $page, $file, $options = '', $sortfield = '',
|
||||
if ($limit < 0) {
|
||||
$limit = $conf->liste_limit;
|
||||
}
|
||||
|
||||
if ($savlimit != 0 && (($num > $limit) || ($num == -1) || ($limit == 0))) {
|
||||
$nextpage = 1;
|
||||
} else {
|
||||
@ -5475,7 +5476,7 @@ function print_barre_liste($titre, $page, $file, $options = '', $sortfield = '',
|
||||
}
|
||||
// Show navigation bar
|
||||
$pagelist = '';
|
||||
if ($savlimit != 0 && ($page > 0 || $num > $limit)) {
|
||||
if ($savlimit != 0 && ((int) $page > 0 || $num > $limit)) {
|
||||
if ($totalnboflines) { // If we know total nb of lines
|
||||
// Define nb of extra page links before and after selected page + ... + first or last
|
||||
$maxnbofpage = (empty($conf->dol_optimize_smallscreen) ? 4 : 0);
|
||||
@ -5535,8 +5536,8 @@ function print_barre_liste($titre, $page, $file, $options = '', $sortfield = '',
|
||||
}
|
||||
}
|
||||
|
||||
if ($savlimit || $morehtmlright || $morehtmlrightbeforearrow) {
|
||||
print_fleche_navigation($page, $file, $options, $nextpage, $pagelist, $morehtmlright, $savlimit, $totalnboflines, $hideselectlimit, $morehtmlrightbeforearrow); // output the div and ul for previous/last completed with page numbers into $pagelist
|
||||
if (($savlimit || $morehtmlright || $morehtmlrightbeforearrow) && empty($hidenavigation)) {
|
||||
print_fleche_navigation((int) $page, $file, $options, $nextpage, $pagelist, $morehtmlright, $savlimit, $totalnboflines, $hideselectlimit, $morehtmlrightbeforearrow); // output the div and ul for previous/last completed with page numbers into $pagelist
|
||||
}
|
||||
|
||||
// js to autoselect page field on focus
|
||||
@ -11587,7 +11588,7 @@ function jsonOrUnserialize($stringtodecode)
|
||||
/**
|
||||
* forgeSQLFromUniversalSearchCriteria
|
||||
*
|
||||
* @param string $filter String with universal search string
|
||||
* @param string $filter String with universal search string. Must be (aaa:bbb:...) with aaa is a field name (with alias or not) and bbb is one of this operator '=', '<', '>', '<=', '>=', '!=', 'in', 'notin', 'like', 'notlike', 'is', 'isnot'.
|
||||
* @param string $error Error message
|
||||
* @return string Return forged SQL string
|
||||
*/
|
||||
@ -11605,7 +11606,7 @@ function forgeSQLFromUniversalSearchCriteria($filter, &$error = '')
|
||||
// If the string result contains something else than '()', the syntax was wrong
|
||||
if (preg_match('/[^\(\)]/', $t)) {
|
||||
$error = 'Bad syntax of the search string, filter criteria is inhalited';
|
||||
return '1 = 3'; // Bad syntax of the search string, we force a SQL not found
|
||||
return 'Filter syntax error'; // Bad syntax of the search string, we force a SQL not found
|
||||
}
|
||||
|
||||
return " AND (".preg_replace_callback('/'.$regexstring.'/i', 'dolForgeCriteriaCallback', $filter).")";
|
||||
@ -11684,7 +11685,10 @@ function dolForgeCriteriaCallback($matches)
|
||||
return '';
|
||||
}
|
||||
|
||||
$operator = strtoupper(preg_replace('/[^a-z<>=]/i', '', trim($tmp[1])));
|
||||
$operand = preg_replace('/[^a-z0-9\._]/i', '', trim($tmp[0]));
|
||||
|
||||
$operator = strtoupper(preg_replace('/[^a-z<>!=]/i', '', trim($tmp[1])));
|
||||
|
||||
if ($operator == 'NOTLIKE') {
|
||||
$operator = 'NOT LIKE';
|
||||
}
|
||||
@ -11722,7 +11726,7 @@ function dolForgeCriteriaCallback($matches)
|
||||
}
|
||||
}
|
||||
|
||||
return $db->escape($tmp[0]).' '.strtoupper($operator).' '.$tmpescaped;
|
||||
return $db->escape($operand).' '.strtoupper($operator).' '.$tmpescaped;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -146,7 +146,7 @@ function payment_supplier_prepare_head(Paiement $object)
|
||||
*/
|
||||
function getValidOnlinePaymentMethods($paymentmethod = '')
|
||||
{
|
||||
global $conf, $langs, $hookmanager, $action;
|
||||
global $langs, $hookmanager, $action;
|
||||
|
||||
$validpaymentmethod = array();
|
||||
|
||||
@ -434,6 +434,8 @@ function htmlPrintOnlinePaymentFooter($fromcompany, $langs, $addformmessage = 0,
|
||||
{
|
||||
global $conf;
|
||||
|
||||
$reg = array();
|
||||
|
||||
// Juridical status
|
||||
$line1 = "";
|
||||
if ($fromcompany->forme_juridique_code) {
|
||||
@ -485,9 +487,8 @@ function htmlPrintOnlinePaymentFooter($fromcompany, $langs, $addformmessage = 0,
|
||||
|
||||
print '<!-- htmlPrintOnlinePaymentFooter -->'."\n";
|
||||
|
||||
print '<footer class="center paddingleft paddingright centpercent">'."\n";
|
||||
print '<br>';
|
||||
|
||||
print '<div class="center paddingleft paddingright">'."\n";
|
||||
if ($addformmessage) {
|
||||
print '<!-- object = '.(empty($object) ? 'undefined' : $object->element).' -->';
|
||||
print '<br>';
|
||||
@ -519,5 +520,6 @@ function htmlPrintOnlinePaymentFooter($fromcompany, $langs, $addformmessage = 0,
|
||||
print ' - ';
|
||||
}
|
||||
print $line2;
|
||||
print '</span></div>'."\n";
|
||||
print '</span>';
|
||||
print '</footer>'."\n";
|
||||
}
|
||||
|
||||
@ -725,11 +725,16 @@ function pdf_pagehead(&$pdf, $outputlangs, $page_height)
|
||||
$filepath = $conf->mycompany->dir_output.'/logos/'.$conf->global->MAIN_USE_BACKGROUND_ON_PDF;
|
||||
if (file_exists($filepath)) {
|
||||
$pdf->SetAutoPageBreak(0, 0); // Disable auto pagebreak before adding image
|
||||
if (getDolGlobalString('MAIN_USE_BACKGROUND_ON_PDF_ALPHA')) { $pdf->SetAlpha($conf->global->MAIN_USE_BACKGROUND_ON_PDF_ALPHA); } // Option for change opacity of background
|
||||
$pdf->Image($filepath, (isset($conf->global->MAIN_USE_BACKGROUND_ON_PDF_X) ? $conf->global->MAIN_USE_BACKGROUND_ON_PDF_X : 0), (isset($conf->global->MAIN_USE_BACKGROUND_ON_PDF_Y) ? $conf->global->MAIN_USE_BACKGROUND_ON_PDF_Y : 0), 0, $page_height);
|
||||
if (getDolGlobalString('MAIN_USE_BACKGROUND_ON_PDF_ALPHA')) { $pdf->SetAlpha(1); }
|
||||
$pdf->SetPageMark(); // This option avoid to have the images missing on some pages
|
||||
$pdf->SetAutoPageBreak(1, 0); // Restore pagebreak
|
||||
}
|
||||
}
|
||||
if (getDolGlobalString('MAIN_ADD_PDF_BACKGROUND') && getDolGlobalString('MAIN_ADD_PDF_BACKGROUND') != '-1') {
|
||||
$pdf->SetPageMark(); // This option avoid to have the images missing on some pages
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1247,49 +1252,52 @@ function pdf_pagefoot(&$pdf, $outputlangs, $paramfreetext, $fromcompany, $marge_
|
||||
|
||||
$pdf->SetY(-$posy);
|
||||
|
||||
// Hide footer line if footer background color is set
|
||||
if (!getDolGlobalString('PDF_FOOTER_BACKGROUND_COLOR')) {
|
||||
$pdf->line($dims['lm'], $dims['hk'] - $posy, $dims['wk'] - $dims['rm'], $dims['hk'] - $posy);
|
||||
}
|
||||
// Option for hide all footer (page number will no hidden)
|
||||
if (!getDolGlobalInt('PDF_FOOTER_HIDDEN')) {
|
||||
// Hide footer line if footer background color is set
|
||||
if (!getDolGlobalString('PDF_FOOTER_BACKGROUND_COLOR')) {
|
||||
$pdf->line($dims['lm'], $dims['hk'] - $posy, $dims['wk'] - $dims['rm'], $dims['hk'] - $posy);
|
||||
}
|
||||
|
||||
// Option for set top margin height of footer after freetext
|
||||
if (getDolGlobalString('PDF_FOOTER_TOP_MARGIN') || getDolGlobalInt('PDF_FOOTER_TOP_MARGIN') === 0) {
|
||||
$posy -= floatval(getDolGlobalString('PDF_FOOTER_TOP_MARGIN'));
|
||||
} else {
|
||||
$posy--;
|
||||
}
|
||||
// Option for set top margin height of footer after freetext
|
||||
if (getDolGlobalString('PDF_FOOTER_TOP_MARGIN') || getDolGlobalInt('PDF_FOOTER_TOP_MARGIN') === 0) {
|
||||
$posy -= floatval(getDolGlobalString('PDF_FOOTER_TOP_MARGIN'));
|
||||
} else {
|
||||
$posy--;
|
||||
}
|
||||
|
||||
if (!empty($line1)) {
|
||||
$pdf->SetFont('', 'B', 7);
|
||||
$pdf->SetXY($dims['lm'], -$posy);
|
||||
$pdf->MultiCell($dims['wk'] - $dims['rm'] - $dims['lm'], 2, $line1, 0, 'C', 0);
|
||||
$posy -= 3;
|
||||
$pdf->SetFont('', '', 7);
|
||||
}
|
||||
if (!empty($line1)) {
|
||||
$pdf->SetFont('', 'B', 7);
|
||||
$pdf->SetXY($dims['lm'], -$posy);
|
||||
$pdf->MultiCell($dims['wk'] - $dims['rm'] - $dims['lm'], 2, $line1, 0, 'C', 0);
|
||||
$posy -= 3;
|
||||
$pdf->SetFont('', '', 7);
|
||||
}
|
||||
|
||||
if (!empty($line2)) {
|
||||
$pdf->SetFont('', 'B', 7);
|
||||
$pdf->SetXY($dims['lm'], -$posy);
|
||||
$pdf->MultiCell($dims['wk'] - $dims['rm'] - $dims['lm'], 2, $line2, 0, 'C', 0);
|
||||
$posy -= 3;
|
||||
$pdf->SetFont('', '', 7);
|
||||
}
|
||||
if (!empty($line2)) {
|
||||
$pdf->SetFont('', 'B', 7);
|
||||
$pdf->SetXY($dims['lm'], -$posy);
|
||||
$pdf->MultiCell($dims['wk'] - $dims['rm'] - $dims['lm'], 2, $line2, 0, 'C', 0);
|
||||
$posy -= 3;
|
||||
$pdf->SetFont('', '', 7);
|
||||
}
|
||||
|
||||
if (!empty($line3)) {
|
||||
$pdf->SetXY($dims['lm'], -$posy);
|
||||
$pdf->MultiCell($dims['wk'] - $dims['rm'] - $dims['lm'], 2, $line3, 0, 'C', 0);
|
||||
}
|
||||
if (!empty($line3)) {
|
||||
$pdf->SetXY($dims['lm'], -$posy);
|
||||
$pdf->MultiCell($dims['wk'] - $dims['rm'] - $dims['lm'], 2, $line3, 0, 'C', 0);
|
||||
}
|
||||
|
||||
if (!empty($line4)) {
|
||||
$posy -= 3;
|
||||
$pdf->SetXY($dims['lm'], -$posy);
|
||||
$pdf->MultiCell($dims['wk'] - $dims['rm'] - $dims['lm'], 2, $line4, 0, 'C', 0);
|
||||
if (!empty($line4)) {
|
||||
$posy -= 3;
|
||||
$pdf->SetXY($dims['lm'], -$posy);
|
||||
$pdf->MultiCell($dims['wk'] - $dims['rm'] - $dims['lm'], 2, $line4, 0, 'C', 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Show page nb only on iso languages (so default Helvetica font)
|
||||
// if (strtolower(pdf_getPDFFont($outputlangs)) == 'helvetica') {
|
||||
$pdf->SetXY($dims['wk'] - $dims['rm'] - 18, -$posy);
|
||||
$pdf->SetXY($dims['wk'] - $dims['rm'] - 18 - getDolGlobalInt('PDF_FOOTER_PAGE_NUMBER_X', 0), -$posy - getDolGlobalInt('PDF_FOOTER_PAGE_NUMBER_Y', 0));
|
||||
// $pdf->MultiCell(18, 2, $pdf->getPageNumGroupAlias().' / '.$pdf->getPageGroupAlias(), 0, 'R', 0);
|
||||
// $pdf->MultiCell(18, 2, $pdf->PageNo().' / '.$pdf->getAliasNbPages(), 0, 'R', 0); // doesn't works with all fonts
|
||||
// $pagination = $pdf->getAliasNumPage().' / '.$pdf->getAliasNbPages(); // works with $pdf->Cell
|
||||
|
||||
@ -4,6 +4,7 @@
|
||||
* Copyright (C) 2011 Juanjo Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2018-2021 Frédéric France <frederic.france@netlogic.fr>
|
||||
* Copyright (C) 2022 Charlene Benke <charlene@patas-monkey.com>
|
||||
* Copyright (C) 2023 Gauthier VERDOL <gauthier.verdol@atm-consulting.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
|
||||
@ -100,8 +101,9 @@ function project_prepare_head(Project $project, $moreparam = '')
|
||||
$sql = "SELECT t.rowid";
|
||||
//$sql .= " FROM ".MAIN_DB_PREFIX."projet_task_time as t, ".MAIN_DB_PREFIX."projet_task as pt, ".MAIN_DB_PREFIX."user as u";
|
||||
//$sql .= " WHERE t.fk_user = u.rowid AND t.fk_task = pt.rowid";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."projet_task_time as t, ".MAIN_DB_PREFIX."projet_task as pt";
|
||||
$sql .= " WHERE t.fk_task = pt.rowid";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."element_time as t, ".MAIN_DB_PREFIX."projet_task as pt";
|
||||
$sql .= " WHERE t.fk_element = pt.rowid";
|
||||
$sql .= " AND t.elementtype = 'task'";
|
||||
$sql .= " AND pt.fk_projet =".((int) $project->id);
|
||||
$resql = $db->query($sql);
|
||||
if ($resql) {
|
||||
@ -372,8 +374,8 @@ function task_prepare_head($object)
|
||||
$sql = "SELECT t.rowid";
|
||||
//$sql .= " FROM ".MAIN_DB_PREFIX."projet_task_time as t, ".MAIN_DB_PREFIX."projet_task as pt, ".MAIN_DB_PREFIX."user as u";
|
||||
//$sql .= " WHERE t.fk_user = u.rowid AND t.fk_task = pt.rowid";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."projet_task_time as t";
|
||||
$sql .= " WHERE t.fk_task = ".((int) $object->id);
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."element_time as t";
|
||||
$sql .= " WHERE t.elementtype='task' AND t.fk_element = ".((int) $object->id);
|
||||
$resql = $db->query($sql);
|
||||
if ($resql) {
|
||||
$obj = $db->fetch_object($resql);
|
||||
|
||||
@ -50,7 +50,8 @@ function report_header($reportname, $notused, $period, $periodlink, $description
|
||||
|
||||
$title = $langs->trans("Report");
|
||||
|
||||
print_barre_liste($title, '', '');
|
||||
print_barre_liste($title, 0, '', '', '', '', '', -1, '', 'generic', 0, '', '', -1, 1, 1);
|
||||
|
||||
print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].$varlink.'">'."\n";
|
||||
print '<input type="hidden" name="token" value="'.newToken().'">'."\n";
|
||||
|
||||
|
||||
@ -113,10 +113,11 @@ function dolGetRandomBytes($length)
|
||||
* @param string $chain string to encode
|
||||
* @param string $key If '', we use $dolibarr_main_instance_unique_id
|
||||
* @param string $ciphering Default ciphering algorithm
|
||||
* @param string $forceseed To force the seed
|
||||
* @return string encoded string
|
||||
* @see dolDecrypt(), dol_hash()
|
||||
*/
|
||||
function dolEncrypt($chain, $key = '', $ciphering = "AES-256-CTR")
|
||||
function dolEncrypt($chain, $key = '', $ciphering = 'AES-256-CTR', $forceseed = '')
|
||||
{
|
||||
global $dolibarr_main_instance_unique_id;
|
||||
global $dolibarr_disable_dolcrypt_for_debug;
|
||||
@ -134,6 +135,9 @@ function dolEncrypt($chain, $key = '', $ciphering = "AES-256-CTR")
|
||||
if (empty($key)) {
|
||||
$key = $dolibarr_main_instance_unique_id;
|
||||
}
|
||||
if (empty($ciphering)) {
|
||||
$ciphering = 'AES-256-CTR';
|
||||
}
|
||||
|
||||
$newchain = $chain;
|
||||
|
||||
@ -145,7 +149,11 @@ function dolEncrypt($chain, $key = '', $ciphering = "AES-256-CTR")
|
||||
if ($ivlen === false || $ivlen < 1 || $ivlen > 32) {
|
||||
$ivlen = 16;
|
||||
}
|
||||
$ivseed = dolGetRandomBytes($ivlen);
|
||||
if (empty($forceseed)) {
|
||||
$ivseed = dolGetRandomBytes($ivlen);
|
||||
} else {
|
||||
$ivseed = dol_trunc(md5($forceseed), $ivlen, 'right', 'UTF-8', 1);
|
||||
}
|
||||
|
||||
$newchain = openssl_encrypt($chain, $ciphering, $key, 0, $ivseed);
|
||||
return 'dolcrypt:'.$ciphering.':'.$ivseed.':'.$newchain;
|
||||
@ -260,7 +268,7 @@ function dol_verifyHash($chain, $hash, $type = '0')
|
||||
global $conf;
|
||||
|
||||
if ($type == '0' && !empty($conf->global->MAIN_SECURITY_HASH_ALGO) && $conf->global->MAIN_SECURITY_HASH_ALGO == 'password_hash' && function_exists('password_verify')) {
|
||||
if ($hash[0] == '$') {
|
||||
if (! empty($hash[0]) && $hash[0] == '$') {
|
||||
return password_verify($chain, $hash);
|
||||
} elseif (strlen($hash) == 32) {
|
||||
return dol_verifyHash($chain, $hash, '3'); // md5
|
||||
|
||||
@ -581,6 +581,9 @@ function dolJSToSetRandomPassword($htmlname, $htmlnameofbutton = 'generate_token
|
||||
token: \''.dol_escape_js(newToken()).'\'
|
||||
},
|
||||
function(result) {
|
||||
if ($("input#'.dol_escape_js($htmlname).'").attr("type") == "password") {
|
||||
$("input#'.dol_escape_js($htmlname).'").attr("type", "text");
|
||||
}
|
||||
$("#'.dol_escape_js($htmlname).'").val(result);
|
||||
});
|
||||
});
|
||||
|
||||
@ -203,7 +203,7 @@ function generate_random_id($car = 16)
|
||||
}
|
||||
|
||||
/**
|
||||
* Show header for public pages
|
||||
* Show http header, open body tag and show HTML header banner for public pages for tickets
|
||||
*
|
||||
* @param string $title Title
|
||||
* @param string $head Head array
|
||||
@ -216,11 +216,14 @@ function generate_random_id($car = 16)
|
||||
function llxHeaderTicket($title, $head = "", $disablejs = 0, $disablehead = 0, $arrayofjs = '', $arrayofcss = '')
|
||||
{
|
||||
global $user, $conf, $langs, $mysoc;
|
||||
|
||||
$urllogo = "";
|
||||
top_htmlhead($head, $title, $disablejs, $disablehead, $arrayofjs, $arrayofcss, 0, 1); // Show html headers
|
||||
|
||||
print '<body id="mainbody" class="publicnewticketform">';
|
||||
print '<div class="center">';
|
||||
print '<div class="publicnewticketform2 flexcontainer centpercent" style="min-height: 100%;">';
|
||||
|
||||
print '<header class="center centpercent">';
|
||||
|
||||
// Define urllogo
|
||||
if (getDolGlobalInt('TICKET_SHOW_COMPANY_LOGO') || getDolGlobalString('TICKET_PUBLIC_INTERFACE_TOPIC')) {
|
||||
@ -239,21 +242,21 @@ function llxHeaderTicket($title, $head = "", $disablejs = 0, $disablehead = 0, $
|
||||
}
|
||||
|
||||
// Output html code for logo
|
||||
if ($urllogo || getDolGlobalInt('TICKET_PUBLIC_INTERFACE_TOPIC')) {
|
||||
if ($urllogo || getDolGlobalString('TICKET_PUBLIC_INTERFACE_TOPIC')) {
|
||||
print '<div class="backgreypublicpayment">';
|
||||
print '<div class="logopublicpayment">';
|
||||
if ($urllogo) {
|
||||
print '<a href="'.(getDolGlobalInt('TICKET_URL_PUBLIC_INTERFACE') ? getDolGlobalInt('TICKET_URL_PUBLIC_INTERFACE') : dol_buildpath('/public/ticket/index.php?entity='.$conf->entity, 1)).'">';
|
||||
print '<a href="'.(getDolGlobalString('TICKET_URL_PUBLIC_INTERFACE') ? getDolGlobalString('TICKET_URL_PUBLIC_INTERFACE') : dol_buildpath('/public/ticket/index.php?entity='.$conf->entity, 1)).'">';
|
||||
print '<img id="dolpaymentlogo" src="'.$urllogo.'"';
|
||||
print '>';
|
||||
print '</a>';
|
||||
}
|
||||
if (getDolGlobalInt('TICKET_PUBLIC_INTERFACE_TOPIC')) {
|
||||
if (getDolGlobalString('TICKET_PUBLIC_INTERFACE_TOPIC')) {
|
||||
print '<div class="clearboth"></div><strong>'.(getDolGlobalString('TICKET_PUBLIC_INTERFACE_TOPIC') ? getDolGlobalString('TICKET_PUBLIC_INTERFACE_TOPIC') : $langs->trans("TicketSystem")).'</strong>';
|
||||
}
|
||||
print '</div>';
|
||||
if (!getDolGlobalInt('MAIN_HIDE_POWERED_BY')) {
|
||||
print '<div class="poweredbypublicpayment opacitymedium right"><a class="poweredbyhref" href="https://www.dolibarr.org?utm_medium=website&utm_source=poweredby" target="dolibarr" rel="noopener">'.$langs->trans("PoweredBy").'<br><img src="'.DOL_URL_ROOT.'/theme/dolibarr_logo.svg" width="80px"></a></div>';
|
||||
print '<div class="poweredbypublicpayment opacitymedium right hideonsmartphone"><a class="poweredbyhref" href="https://www.dolibarr.org?utm_medium=website&utm_source=poweredby" target="dolibarr" rel="noopener">'.$langs->trans("PoweredBy").'<br><img src="'.DOL_URL_ROOT.'/theme/dolibarr_logo.svg" width="80px"></a></div>';
|
||||
}
|
||||
print '</div>';
|
||||
}
|
||||
@ -264,7 +267,7 @@ function llxHeaderTicket($title, $head = "", $disablejs = 0, $disablehead = 0, $
|
||||
print '</div>';
|
||||
}
|
||||
|
||||
print '</div>';
|
||||
print '</header>';
|
||||
|
||||
print '<div class="ticketlargemargin">';
|
||||
//print '<div class="ticketlargemargin">';
|
||||
}
|
||||
|
||||
@ -122,7 +122,7 @@ class mod_member_advanced extends ModeleNumRefMembers
|
||||
* Return next value
|
||||
*
|
||||
* @param Societe $objsoc Object third party
|
||||
* @param Member $object Object we need next value for
|
||||
* @param Adherent $object Object we need next value for
|
||||
* @return string Value if OK, 0 if KO
|
||||
*/
|
||||
public function getNextValue($objsoc, $object)
|
||||
|
||||
@ -120,7 +120,7 @@ class mod_member_simple extends ModeleNumRefMembers
|
||||
* Return next value
|
||||
*
|
||||
* @param Societe $objsoc Object third party
|
||||
* @param Member $object Object we need next value for
|
||||
* @param Adherent $object Object we need next value for
|
||||
* @return string Value if OK, 0 if KO
|
||||
*/
|
||||
public function getNextValue($objsoc, $object)
|
||||
|
||||
@ -239,7 +239,7 @@ class modFacture extends DolibarrModules
|
||||
$this->import_fields_array[$r] = array(
|
||||
'f.ref' => 'InvoiceRef*',
|
||||
'f.ref_ext' => 'ExternalRef',
|
||||
'f.ref_client' => 'CustomerRef',
|
||||
'f.ref_client' => 'RefCustomer',
|
||||
'f.type' => 'Type*',
|
||||
'f.fk_soc' => 'Customer*',
|
||||
'f.datec' => 'InvoiceDateCreation',
|
||||
|
||||
@ -5,7 +5,8 @@
|
||||
* Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be>
|
||||
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
|
||||
* Copyright (C) 2014 Charles-Fr BENKE <charles.fr@benke.fr>
|
||||
* Copyright (C) 2014 Charles-Fr BENKE <charles.fr@benke.fr>
|
||||
* Copyright (C) 2023 Gauthier VERDOL <gauthier.verdol@atm-consulting.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
|
||||
@ -230,7 +231,7 @@ class modProjet extends DolibarrModules
|
||||
'p.usage_opportunity'=>'Boolean', 'p.usage_task'=>'Boolean', 'p.usage_bill_time'=>'Boolean',
|
||||
'p.datec'=>"Date", 'p.dateo'=>"Date", 'p.datee'=>"Date", 'p.fk_statut'=>'Status', 'cls.code'=>"Text", 'p.opp_percent'=>'Numeric', 'p.opp_amount'=>'Numeric', 'p.description'=>"Text", 'p.entity'=>'Numeric', 'p.budget_amount'=>'Numeric',
|
||||
'pt.rowid'=>'Numeric', 'pt.ref'=>'Text', 'pt.label'=>'Text', 'pt.dateo'=>"Date", 'pt.datee'=>"Date", 'pt.duration_effective'=>"Duree", 'pt.planned_workload'=>"Numeric", 'pt.progress'=>"Numeric", 'pt.description'=>"Text",
|
||||
'ptt.rowid'=>'Numeric', 'ptt.task_date'=>'Date', 'ptt.task_duration'=>"Duree", 'ptt.fk_user'=>"FormSelect:select_dolusers", 'ptt.note'=>"Text"
|
||||
'ptt.rowid'=>'Numeric', 'ptt.element_date'=>'Date', 'ptt.element_duration'=>"Duree", 'ptt.fk_user'=>"FormSelect:select_dolusers", 'ptt.note'=>"Text"
|
||||
);
|
||||
$this->export_entities_array[$r] = array(
|
||||
's.rowid'=>"company", 's.nom'=>'company', 's.address'=>'company', 's.zip'=>'company', 's.town'=>'company', 's.fk_pays'=>'company',
|
||||
@ -272,8 +273,8 @@ class modProjet extends DolibarrModules
|
||||
$keyforaliasextra = 'extra2';
|
||||
include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
|
||||
// End add extra fields
|
||||
$this->export_fields_array[$r] = array_merge($this->export_fields_array[$r], array('ptt.rowid'=>'IdTaskTime', 'ptt.task_date'=>'TaskTimeDate', 'ptt.task_duration'=>"TimesSpent", 'ptt.fk_user'=>"TaskTimeUser", 'ptt.note'=>"TaskTimeNote"));
|
||||
$this->export_entities_array[$r] = array_merge($this->export_entities_array[$r], array('ptt.rowid'=>'task_time', 'ptt.task_date'=>'task_time', 'ptt.task_duration'=>"task_time", 'ptt.fk_user'=>"task_time", 'ptt.note'=>"task_time"));
|
||||
$this->export_fields_array[$r] = array_merge($this->export_fields_array[$r], array('ptt.rowid'=>'IdTaskTime', 'ptt.element_date'=>'TaskTimeDate', 'ptt.element_duration'=>"TimesSpent", 'ptt.fk_user'=>"TaskTimeUser", 'ptt.note'=>"TaskTimeNote"));
|
||||
$this->export_entities_array[$r] = array_merge($this->export_entities_array[$r], array('ptt.rowid'=>'task_time', 'ptt.element_date'=>'task_time', 'ptt.element_duration'=>"task_time", 'ptt.fk_user'=>"task_time", 'ptt.note'=>"task_time"));
|
||||
if (empty($conf->global->PROJECT_HIDE_TASKS)) {
|
||||
$this->export_fields_array[$r] = array_merge($this->export_fields_array[$r], array('f.ref'=>"Billed"));
|
||||
$this->export_entities_array[$r] = array_merge($this->export_entities_array[$r], array('f.ref'=>"task_time"));
|
||||
@ -284,7 +285,7 @@ class modProjet extends DolibarrModules
|
||||
$this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_lead_status as cls ON p.fk_opp_status = cls.rowid';
|
||||
$this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX."projet_task as pt ON p.rowid = pt.fk_projet";
|
||||
$this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'projet_task_extrafields as extra2 ON pt.rowid = extra2.fk_object';
|
||||
$this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX."projet_task_time as ptt ON pt.rowid = ptt.fk_task";
|
||||
$this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX."element_time as ptt ON (pt.rowid = ptt.fk_element AND ptt.elementtype = 'task')";
|
||||
$this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'societe as s ON p.fk_soc = s.rowid';
|
||||
if (empty($conf->global->PROJECT_HIDE_TASKS)) {
|
||||
$this->export_sql_end[$r] .= ' LEFT JOIN '.MAIN_DB_PREFIX.'facture as f ON ptt.invoice_id = f.rowid';
|
||||
|
||||
@ -3,7 +3,8 @@
|
||||
* Copyright (C) 2012 Juanjo Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2013 Florian Henry <florian.henry@ope-concept.pro>
|
||||
* Copyright (C) 2016 Charlie Benke <charlie@patas-monkey.com>
|
||||
* Copyright (C) 2018 Frédéric France <frederic.france@netlogic.fr>
|
||||
* Copyright (C) 2018 Frédéric France <frederic.france@netlogic.fr>
|
||||
* Copyright (C) 2023 Gauthier VERDOL <gauthier.verdol@atm-consulting.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
|
||||
@ -749,13 +750,14 @@ class doc_generic_project_odt extends ModelePDFProjects
|
||||
}
|
||||
|
||||
//Time ressources
|
||||
$sql = "SELECT t.rowid, t.task_date, t.task_duration, t.fk_user, t.note";
|
||||
$sql = "SELECT t.rowid, t.element_date as task_date, t.element_duration as task_duration, t.fk_user, t.note";
|
||||
$sql .= ", u.lastname, u.firstname, t.thm";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."projet_task_time as t";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."element_time as t";
|
||||
$sql .= " , ".MAIN_DB_PREFIX."user as u";
|
||||
$sql .= " WHERE t.fk_task =".((int) $task->id);
|
||||
$sql .= " WHERE t.fk_element =".((int) $task->id);
|
||||
$sql .= " AND t.elementtype = 'task'";
|
||||
$sql .= " AND t.fk_user = u.rowid";
|
||||
$sql .= " ORDER BY t.task_date DESC";
|
||||
$sql .= " ORDER BY t.element_date DESC";
|
||||
|
||||
$resql = $this->db->query($sql);
|
||||
if ($resql) {
|
||||
|
||||
@ -3,7 +3,8 @@
|
||||
* Copyright (C) 2012 Juanjo Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2013 Florian Henry <florian.henry@ope-concept.pro>
|
||||
* Copyright (C) 2016 Charlie Benke <charlie@patas-monkey.com>
|
||||
* Copyright (C) 2018 Frédéric France <frederic.france@netlogic.fr>
|
||||
* Copyright (C) 2018 Frédéric France <frederic.france@netlogic.fr>
|
||||
* Copyright (C) 2023 Gauthier VERDOL <gauthier.verdol@atm-consulting.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
|
||||
@ -662,13 +663,14 @@ class doc_generic_task_odt extends ModelePDFTask
|
||||
}
|
||||
|
||||
// Time ressources
|
||||
$sql = "SELECT t.rowid, t.task_date, t.task_duration, t.fk_user, t.note";
|
||||
$sql = "SELECT t.rowid, t.element_date as task_date, t.element_duration as task_duration, t.fk_user, t.note";
|
||||
$sql .= ", u.lastname, u.firstname";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."projet_task_time as t";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."element_time as t";
|
||||
$sql .= " , ".MAIN_DB_PREFIX."user as u";
|
||||
$sql .= " WHERE t.fk_task =".((int) $object->id);
|
||||
$sql .= " WHERE t.fk_element =".((int) $object->id);
|
||||
$sql .= " AND t.elementtype = 'task'";
|
||||
$sql .= " AND t.fk_user = u.rowid";
|
||||
$sql .= " ORDER BY t.task_date DESC";
|
||||
$sql .= " ORDER BY t.element_date DESC";
|
||||
|
||||
$resql = $this->db->query($sql);
|
||||
if ($resql) {
|
||||
|
||||
@ -386,6 +386,13 @@ class pdf_aurore extends ModelePDFSupplierProposal
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Extrafields in note
|
||||
$extranote = $this->getExtrafieldsInHtml($object, $outputlangs);
|
||||
if (!empty($extranote)) {
|
||||
$notetoshow = dol_concatdesc($notetoshow, $extranote);
|
||||
}
|
||||
|
||||
if ($notetoshow) {
|
||||
$tab_top -= 2;
|
||||
|
||||
|
||||
@ -412,7 +412,7 @@ if ($nolinesbefore) {
|
||||
</td>
|
||||
<?php
|
||||
}
|
||||
if (!empty($inputalsopricewithtax)) {
|
||||
if (!empty($inputalsopricewithtax) && !getDolGlobalInt('MAIN_NO_INPUT_PRICE_WITH_TAX')) {
|
||||
$coldisplay++;
|
||||
?>
|
||||
<td class="nobottom linecoluttc right">
|
||||
|
||||
@ -228,9 +228,13 @@ $coldisplay++;
|
||||
print '<td class="right"><input rel="'.$object->multicurrency_tx.'" type="text" class="flat right" size="5" id="multicurrency_subprice" name="multicurrency_subprice" value="'.(GETPOSTISSET('multicurrency_subprice') ? GETPOST('multicurrency_subprice', 'alpha') : price($line->multicurrency_subprice)).'" /></td>';
|
||||
}
|
||||
|
||||
if ($inputalsopricewithtax) {
|
||||
if (!empty($inputalsopricewithtax) && !getDolGlobalInt('MAIN_NO_INPUT_PRICE_WITH_TAX')) {
|
||||
$coldisplay++;
|
||||
print '<td class="right"><input type="text" class="flat right" size="5" id="price_ttc" name="price_ttc" value="'.(GETPOSTISSET('price_ttc') ? GETPOST('price_ttc') : (isset($line->pu_ttc) ? price($line->pu_ttc, 0, '', 0) : '')).'"';
|
||||
$upinctax = isset($line->pu_ttc) ? $line->pu_ttc : null;
|
||||
if (getDolGlobalInt('MAIN_UNIT_PRICE_WITH_TAX_IS_FOR_ALL_TAXES')) {
|
||||
$upinctax = price2num($line->total_ttc / $line->qty, 'MU');
|
||||
}
|
||||
print '<td class="right"><input type="text" class="flat right" size="5" id="price_ttc" name="price_ttc" value="'.(GETPOSTISSET('price_ttc') ? GETPOST('price_ttc') : (isset($upinctax) ? price($upinctax, 0, '', 0) : '')).'"';
|
||||
if ($situationinvoicelinewithparent) {
|
||||
print ' readonly';
|
||||
}
|
||||
|
||||
@ -92,7 +92,7 @@ if (isModEnabled("multicurrency") && $this->multicurrency_code != $conf->currenc
|
||||
print '<th class="linecoluht_currency right" style="width: 80px">'.$langs->trans('PriceUHTCurrency', $this->multicurrency_code).'</th>';
|
||||
}
|
||||
|
||||
if ($inputalsopricewithtax) {
|
||||
if (!empty($inputalsopricewithtax) && !getDolGlobalInt('MAIN_NO_INPUT_PRICE_WITH_TAX')) {
|
||||
print '<th class="right nowraponall">'.$langs->trans('PriceUTTC').'</th>';
|
||||
}
|
||||
|
||||
|
||||
@ -325,8 +325,14 @@ print $tooltiponpriceend;
|
||||
<td class="linecoluht_currency nowraponall right"><?php $coldisplay++; ?><?php print price($sign * $line->multicurrency_subprice); ?></td>
|
||||
<?php }
|
||||
|
||||
if ($inputalsopricewithtax) { ?>
|
||||
<td class="linecoluttc nowraponall right"><?php $coldisplay++; ?><?php print (isset($line->pu_ttc) ? price($sign * $line->pu_ttc) : price($sign * $line->subprice)); ?></td>
|
||||
if (!empty($inputalsopricewithtax) && !getDolGlobalInt('MAIN_NO_INPUT_PRICE_WITH_TAX')) { ?>
|
||||
<td class="linecoluttc nowraponall right"><?php $coldisplay++; ?><?php
|
||||
$upinctax = isset($line->pu_ttc) ? $line->pu_ttc : null;
|
||||
if (getDolGlobalInt('MAIN_UNIT_PRICE_WITH_TAX_IS_FOR_ALL_TAXES')) {
|
||||
$upinctax = price2num($line->total_ttc / $line->qty, 'MU');
|
||||
}
|
||||
print (isset($upinctax) ? price($sign * $upinctax) : price($sign * $line->subprice));
|
||||
?></td>
|
||||
<?php } ?>
|
||||
|
||||
<td class="linecolqty nowraponall right"><?php $coldisplay++; ?>
|
||||
|
||||
@ -530,6 +530,7 @@ class Expedition extends CommonObject
|
||||
foreach ($tab as $detbatch) {
|
||||
if ($detbatch->entrepot_id == $stockLocation) {
|
||||
if (!($detbatch->create($line_id) > 0)) { // Create an ExpeditionLineBatch
|
||||
$this->errors = $detbatch->errors;
|
||||
$error++;
|
||||
}
|
||||
}
|
||||
@ -3020,7 +3021,7 @@ class ExpeditionLigne extends CommonObjectLine
|
||||
$shipmentLot->qty = $this->detail_batch->qty;
|
||||
$shipmentLot->fk_origin_stock = $batch_id;
|
||||
if ($shipmentLot->create($this->id) < 0) {
|
||||
$this->errors[] = $shipmentLot->errors;
|
||||
$this->errors = $shipmentLot->errors;
|
||||
$error++;
|
||||
}
|
||||
}
|
||||
|
||||
@ -103,11 +103,16 @@ class ExpeditionLineBatch extends CommonObject
|
||||
* Create an expeditiondet_batch DB record link to an expedtiondet record
|
||||
*
|
||||
* @param int $id_line_expdet rowid of expedtiondet record
|
||||
* @param User $f_user User that create
|
||||
* @param int $notrigger 1 = disable triggers
|
||||
* @return int <0 if KO, Id of record (>0) if OK
|
||||
*/
|
||||
public function create($id_line_expdet)
|
||||
public function create($id_line_expdet, $f_user = null, $notrigger = 0)
|
||||
{
|
||||
global $user;
|
||||
|
||||
$error = 0;
|
||||
if (!is_object($f_user)) $f_user = $user;
|
||||
|
||||
$id_line_expdet = (int) $id_line_expdet;
|
||||
|
||||
@ -137,13 +142,24 @@ class ExpeditionLineBatch extends CommonObject
|
||||
$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX.$this->table_element);
|
||||
|
||||
$this->fk_expeditiondet = $id_line_expdet;
|
||||
}
|
||||
|
||||
if (!$error && !$notrigger) {
|
||||
// Call trigger
|
||||
$result = $this->call_trigger('EXPEDITIONLINEBATCH_CREATE', $f_user);
|
||||
if ($result < 0) {
|
||||
$error++;
|
||||
}
|
||||
// End call triggers
|
||||
}
|
||||
|
||||
if (!$error) {
|
||||
return $this->id;
|
||||
} else {
|
||||
foreach ($this->errors as $errmsg) {
|
||||
dol_syslog(get_class($this)."::create ".$errmsg, LOG_ERR);
|
||||
$this->error .= ($this->error ? ', '.$errmsg : $errmsg);
|
||||
}
|
||||
$this->db->rollback();
|
||||
return -1 * $error;
|
||||
}
|
||||
}
|
||||
|
||||
@ -197,9 +197,9 @@ class ExpenseReportIk extends CommonObject
|
||||
$default_range = (int) $userauthor->default_range; // if not defined, then 0
|
||||
$ranges = $this->getRangesByCategory($fk_c_exp_tax_cat);
|
||||
// prevent out of range -1 indice
|
||||
$indice = $default_range > 0 ? $default_range - 1 : 0;
|
||||
$indice = $default_range - 1;
|
||||
// substract 1 because array start from 0
|
||||
if (empty($ranges) || !isset($ranges[$indice])) {
|
||||
if (empty($ranges) || $indice < 0 || !isset($ranges[$indice])) {
|
||||
return false;
|
||||
} else {
|
||||
return $ranges[$indice];
|
||||
|
||||
256
htdocs/fichinter/agenda.php
Normal file
256
htdocs/fichinter/agenda.php
Normal file
@ -0,0 +1,256 @@
|
||||
<?php
|
||||
/* Copyright (C) 2017 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) ---Put here your own copyright and developer email---
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file htdocs/fichinter/agenda.php
|
||||
* \ingroup fichinter
|
||||
* \brief Tab of events on Interventions
|
||||
*/
|
||||
require '../main.inc.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/fichinter/class/fichinter.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/fichinter.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
|
||||
|
||||
// Load translation files required by the page
|
||||
$langs->loadLangs(array("fichinter", "other"));
|
||||
|
||||
// Get parameters
|
||||
$id = GETPOST('id', 'int');
|
||||
$ref = GETPOST('ref', 'alpha');
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$cancel = GETPOST('cancel', 'aZ09');
|
||||
$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : str_replace('_', '', basename(dirname(__FILE__)).basename(__FILE__, '.php')); // To manage different context of search
|
||||
$backtopage = GETPOST('backtopage', 'alpha');
|
||||
|
||||
if (GETPOST('actioncode', 'array')) {
|
||||
$actioncode = GETPOST('actioncode', 'array', 3);
|
||||
if (!count($actioncode)) {
|
||||
$actioncode = '0';
|
||||
}
|
||||
} else {
|
||||
$actioncode = GETPOST("actioncode", "alpha", 3) ? GETPOST("actioncode", "alpha", 3) : (GETPOST("actioncode") == '0' ? '0' : getDolGlobalString('AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT'));
|
||||
}
|
||||
$search_rowid = GETPOST('search_rowid');
|
||||
$search_agenda_label = GETPOST('search_agenda_label');
|
||||
|
||||
$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit;
|
||||
$sortfield = GETPOST('sortfield', 'aZ09comma');
|
||||
$sortorder = GETPOST('sortorder', 'aZ09comma');
|
||||
$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int');
|
||||
if (empty($page) || $page == -1) {
|
||||
$page = 0;
|
||||
} // If $page is not defined, or '' or -1
|
||||
$offset = $limit * $page;
|
||||
$pageprev = $page - 1;
|
||||
$pagenext = $page + 1;
|
||||
if (!$sortfield) {
|
||||
$sortfield = 'a.datep,a.id';
|
||||
}
|
||||
if (!$sortorder) {
|
||||
$sortorder = 'DESC,DESC';
|
||||
}
|
||||
|
||||
// Initialize technical objects
|
||||
$object = new Fichinter($db);
|
||||
$extrafields = new ExtraFields($db);
|
||||
$diroutputmassaction = $conf->fichinter->multidir_output[$conf->entity].'/temp/massgeneration/'.$user->id;
|
||||
$hookmanager->initHooks(array('myobjectagenda', 'globalcard')); // Note that conf->hooks_modules contains array
|
||||
// Fetch optionals attributes and labels
|
||||
$extrafields->fetch_name_optionals_label($object->table_element);
|
||||
|
||||
// Load object
|
||||
include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once // Must be include, not include_once. Include fetch and fetch_thirdparty but not fetch_optionals
|
||||
if ($id > 0 || !empty($ref)) {
|
||||
$upload_dir = $conf->fichinter->multidir_output[!empty($object->entity) ? $object->entity : $conf->entity]."/".$object->id;
|
||||
}
|
||||
|
||||
$permissiontoread = $user->hasRight("fichinter", "lire");
|
||||
$permissiontoadd = $user->hasRight("fichinter", "creer");
|
||||
|
||||
// Security check
|
||||
if (!empty($user->socid)) {
|
||||
$socid = $user->socid;
|
||||
}
|
||||
$isdraft = (($object->status == $object::STATUS_DRAFT) ? 1 : 0);
|
||||
restrictedArea($user, 'ficheinter', $object->id, '', '', 'fk_soc', 'rowid', $isdraft);
|
||||
|
||||
|
||||
/*
|
||||
* Actions
|
||||
*/
|
||||
|
||||
$parameters = array('id'=>$id);
|
||||
$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
|
||||
if ($reshook < 0) {
|
||||
setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
||||
}
|
||||
|
||||
if (empty($reshook)) {
|
||||
// Cancel
|
||||
if (GETPOST('cancel', 'alpha') && !empty($backtopage)) {
|
||||
header("Location: ".$backtopage);
|
||||
exit;
|
||||
}
|
||||
|
||||
// Purge search criteria
|
||||
if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // All tests are required to be compatible with all browsers
|
||||
$actioncode = '';
|
||||
$search_agenda_label = '';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* View
|
||||
*/
|
||||
|
||||
$form = new Form($db);
|
||||
|
||||
if ($object->id > 0) {
|
||||
$title = $langs->trans("Agenda");
|
||||
//if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/thirdpartynameonly/',$conf->global->MAIN_HTML_TITLE) && $object->name) $title=$object->name." - ".$title;
|
||||
$help_url = 'EN:Module_Agenda_En|DE:Modul_Terminplanung';
|
||||
llxHeader('', $title, $help_url);
|
||||
|
||||
if (isModEnabled('notification')) {
|
||||
$langs->load("mails");
|
||||
}
|
||||
$head = fichinter_prepare_head($object);
|
||||
|
||||
|
||||
print dol_get_fiche_head($head, 'agenda', $langs->trans("Intervention"), -1, $object->picto);
|
||||
|
||||
// Object card
|
||||
// ------------------------------------------------------------
|
||||
$linkback = '<a href="'.DOL_URL_ROOT.'/fichinter/list.php?restore_lastsearch_values=1'.(!empty($socid) ? '&socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>';
|
||||
|
||||
$morehtmlref = '<div class="refidno">';
|
||||
// Ref customer
|
||||
$morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1);
|
||||
$morehtmlref .= $form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1);
|
||||
// Thirdparty
|
||||
$morehtmlref .= '<br>'.$object->thirdparty->getNomUrl(1);
|
||||
// Project
|
||||
if (isModEnabled('project')) {
|
||||
$langs->load("projects");
|
||||
$morehtmlref .= '<br>';
|
||||
if (0) {
|
||||
$morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"');
|
||||
if ($action != 'classify') {
|
||||
$morehtmlref .= '<a class="editfielda" href="'.$_SERVER['PHP_SELF'].'?action=classify&token='.newToken().'&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetProject')).'</a> ';
|
||||
}
|
||||
$morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, 0, 0, 1, '', 'maxwidth300');
|
||||
} else {
|
||||
if (!empty($object->fk_project)) {
|
||||
$proj = new Project($db);
|
||||
$proj->fetch($object->fk_project);
|
||||
$morehtmlref .= $proj->getNomUrl(1);
|
||||
if ($proj->title) {
|
||||
$morehtmlref .= '<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).'</span>';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$morehtmlref .= '</div>';
|
||||
|
||||
|
||||
dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref);
|
||||
|
||||
print '<div class="fichecenter">';
|
||||
print '<div class="underbanner clearboth"></div>';
|
||||
|
||||
$object->info($object->id);
|
||||
dol_print_object_info($object, 1);
|
||||
|
||||
print '</div>';
|
||||
|
||||
print dol_get_fiche_end();
|
||||
|
||||
|
||||
|
||||
// Actions buttons
|
||||
|
||||
$objthirdparty = $object;
|
||||
$objcon = new stdClass();
|
||||
|
||||
$out = '&origin='.urlencode($object->element.(property_exists($object, 'module') ? '@'.$object->module : '')).'&originid='.urlencode($object->id);
|
||||
$urlbacktopage = $_SERVER['PHP_SELF'].'?id='.$object->id;
|
||||
$out .= '&backtopage='.urlencode($urlbacktopage);
|
||||
$permok = $user->rights->agenda->myactions->create;
|
||||
if ((!empty($objthirdparty->id) || !empty($objcon->id)) && $permok) {
|
||||
//$out.='<a href="'.DOL_URL_ROOT.'/comm/action/card.php?action=create';
|
||||
if (get_class($objthirdparty) == 'Societe') {
|
||||
$out .= '&socid='.urlencode($objthirdparty->id);
|
||||
}
|
||||
$out .= (!empty($objcon->id) ? '&contactid='.urlencode($objcon->id) : '');
|
||||
//$out.=$langs->trans("AddAnAction").' ';
|
||||
//$out.=img_picto($langs->trans("AddAnAction"),'filenew');
|
||||
//$out.="</a>";
|
||||
}
|
||||
|
||||
$morehtmlright = '';
|
||||
|
||||
//$messagingUrl = DOL_URL_ROOT.'/societe/messaging.php?socid='.$object->id;
|
||||
//$morehtmlright .= dolGetButtonTitle($langs->trans('ShowAsConversation'), '', 'fa fa-comments imgforviewmode', $messagingUrl, '', 1);
|
||||
//$messagingUrl = DOL_URL_ROOT.'/societe/agenda.php?socid='.$object->id;
|
||||
//$morehtmlright .= dolGetButtonTitle($langs->trans('MessageListViewType'), '', 'fa fa-bars imgforviewmode', $messagingUrl, '', 2);
|
||||
|
||||
if (isModEnabled('agenda')) {
|
||||
if ($user->hasRight('agenda', 'myactions', 'create') || $user->hasRight('agenda', 'allactions', 'create')) {
|
||||
$morehtmlright .= dolGetButtonTitle($langs->trans('AddAction'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/fichinter/card.php?action=create'.$out);
|
||||
} else {
|
||||
$morehtmlright .= dolGetButtonTitle($langs->trans('AddAction'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/fichinter/card.php?action=create'.$out, '', 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (isModEnabled('agenda') && (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read))) {
|
||||
print '<br>';
|
||||
|
||||
$param = '&id='.$object->id.(!empty($socid) ? '&socid='.$socid : '');
|
||||
if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) {
|
||||
$param .= '&contextpage='.urlencode($contextpage);
|
||||
}
|
||||
if ($limit > 0 && $limit != $conf->liste_limit) {
|
||||
$param .= '&limit='.urlencode($limit);
|
||||
}
|
||||
|
||||
// Try to know count of actioncomm from cache
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/memory.lib.php';
|
||||
$cachekey = 'count_events_fichinter_'.$object->id;
|
||||
$nbEvent = dol_getcache($cachekey);
|
||||
|
||||
print_barre_liste($langs->trans("ActionsOnFicheInter").(is_numeric($nbEvent) ? '<span class="opacitymedium colorblack paddingleft">('.$nbEvent.')</span>': ''), 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, '', 0, -1, '', 0, $morehtmlright, '', 0, 1, 1);
|
||||
//print_barre_liste($langs->trans("ActionsOnPropal"), 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, '', 0, -1, '', 0, $morehtmlright, '', 0, 1, 1);
|
||||
|
||||
// List of all actions
|
||||
$filters = array();
|
||||
$filters['search_agenda_label'] = $search_agenda_label;
|
||||
$filters['search_rowid'] = $search_rowid;
|
||||
|
||||
// TODO Replace this with same code than into list.php
|
||||
show_actions_done($conf, $langs, $db, $object, null, 0, $actioncode, '', $filters, $sortfield, $sortorder, property_exists($object, 'module') ? $object->module : '');
|
||||
}
|
||||
}
|
||||
|
||||
// End of page
|
||||
llxFooter();
|
||||
$db->close();
|
||||
@ -102,10 +102,12 @@ if ($user->socid) {
|
||||
}
|
||||
$result = restrictedArea($user, 'ficheinter', $id, 'fichinter');
|
||||
|
||||
$permissionnote = $user->rights->ficheinter->creer; // Used by the include of actions_setnotes.inc.php
|
||||
$permissiondellink = $user->rights->ficheinter->creer; // Used by the include of actions_dellink.inc.php
|
||||
$permissionnote = $user->hasRight('ficheinter', 'creer'); // Used by the include of actions_setnotes.inc.php
|
||||
$permissiondellink = $user->hasRight('ficheinter', 'creer'); // Used by the include of actions_dellink.inc.php
|
||||
$permissiontodelete = (($object->statut == Fichinter::STATUS_DRAFT && $user->hasRight('ficheinter', 'creer')) || $user->rights->ficheinter->supprimer);
|
||||
|
||||
$usercancreate = $user->hasRight('ficheinter', 'creer');
|
||||
|
||||
|
||||
/*
|
||||
* Actions
|
||||
@ -1163,32 +1165,21 @@ if ($action == 'create') {
|
||||
// Project
|
||||
if (isModEnabled('project')) {
|
||||
$langs->load("projects");
|
||||
$morehtmlref .= '<br>'.$langs->trans('Project').' ';
|
||||
if ($user->rights->ficheinter->creer) {
|
||||
$morehtmlref .= '<br>';
|
||||
if ($usercancreate) {
|
||||
$morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"');
|
||||
if ($action != 'classify') {
|
||||
$morehtmlref .= '<a class="editfielda" href="'.$_SERVER['PHP_SELF'].'?action=classify&token='.newToken().'&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetProject')).'</a> : ';
|
||||
}
|
||||
if ($action == 'classify') {
|
||||
//$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1);
|
||||
$morehtmlref .= '<form method="post" action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'">';
|
||||
$morehtmlref .= '<input type="hidden" name="action" value="classin">';
|
||||
$morehtmlref .= '<input type="hidden" name="token" value="'.newToken().'">';
|
||||
$morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1);
|
||||
$morehtmlref .= '<input type="submit" class="button button-edit valignmiddle" value="'.$langs->trans("Modify").'">';
|
||||
$morehtmlref .= '</form>';
|
||||
} else {
|
||||
$morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1, '', 'maxwidth300');
|
||||
$morehtmlref .= '<a class="editfielda" href="'.$_SERVER['PHP_SELF'].'?action=classify&token='.newToken().'&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetProject')).'</a> ';
|
||||
}
|
||||
$morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, 0, 0, 1, '', 'maxwidth300');
|
||||
} else {
|
||||
if (!empty($object->fk_project)) {
|
||||
$proj = new Project($db);
|
||||
$proj->fetch($object->fk_project);
|
||||
$morehtmlref .= ' : '.$proj->getNomUrl(1);
|
||||
$morehtmlref .= $proj->getNomUrl(1);
|
||||
if ($proj->title) {
|
||||
$morehtmlref .= ' - '.$proj->title;
|
||||
$morehtmlref .= '<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).'</span>';
|
||||
}
|
||||
} else {
|
||||
$morehtmlref .= '';
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1729,10 +1720,14 @@ if ($action == 'create') {
|
||||
|
||||
print '</div><div class="fichehalfright">';
|
||||
|
||||
$MAXEVENT = 10;
|
||||
|
||||
$morehtmlcenter = dolGetButtonTitle($langs->trans('SeeAll'), '', 'fa fa-bars imgforviewmode', DOL_URL_ROOT.'/fichinter/agenda.php?id='.$object->id);
|
||||
|
||||
// List of actions on element
|
||||
include_once DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php';
|
||||
$formactions = new FormActions($db);
|
||||
$somethingshown = $formactions->showactions($object, 'fichinter', $socid, 1);
|
||||
$somethingshown = $formactions->showactions($object, 'fichinter', $socid, 1, '', $MAXEVENT, '', $morehtmlcenter); // Show all action for thirdparty
|
||||
|
||||
print '</div></div>';
|
||||
}
|
||||
|
||||
@ -16,9 +16,15 @@
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
use Luracast\Restler\RestException;
|
||||
/**
|
||||
* \file htdocs/fichinter/class/api_interventions.class.php
|
||||
* \ingroup fichinter
|
||||
* \brief File of API to manage intervention
|
||||
*/
|
||||
use Luracast\Restler\RestException;
|
||||
|
||||
require_once DOL_DOCUMENT_ROOT.'/fichinter/class/fichinter.class.php';
|
||||
|
||||
require_once DOL_DOCUMENT_ROOT.'/fichinter/class/fichinter.class.php';
|
||||
|
||||
/**
|
||||
* API class for Interventions
|
||||
|
||||
@ -24,7 +24,7 @@
|
||||
|
||||
/**
|
||||
* \file htdocs/fichinter/class/fichinter.class.php
|
||||
* \ingroup ficheinter
|
||||
* \ingroup fichinter
|
||||
* \brief Fichier de la classe des gestion des fiches interventions
|
||||
*/
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
|
||||
|
||||
@ -24,7 +24,7 @@
|
||||
|
||||
/**
|
||||
* \file htdocs/fichinter/class/fichinterrec.class.php
|
||||
* \ingroup facture
|
||||
* \ingroup fichinter
|
||||
* \brief Fichier de la classe des factures recurentes
|
||||
*/
|
||||
|
||||
|
||||
@ -52,6 +52,9 @@ if (!$result) {
|
||||
exit;
|
||||
}
|
||||
|
||||
$usercancreate = $user->hasRight('ficheinter', 'creer');
|
||||
|
||||
|
||||
/*
|
||||
* Adding a new contact
|
||||
*/
|
||||
@ -119,40 +122,30 @@ if ($id > 0 || !empty($ref)) {
|
||||
|
||||
$morehtmlref = '<div class="refidno">';
|
||||
// Ref customer
|
||||
//$morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1);
|
||||
//$morehtmlref.=$form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1);
|
||||
//$morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, $user->rights->ficheinter->creer, 'string', '', 0, 1);
|
||||
//$morehtmlref.=$form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, $user->rights->ficheinter->creer, 'string', '', null, null, '', 1);
|
||||
$morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1);
|
||||
$morehtmlref.=$form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1);
|
||||
// Thirdparty
|
||||
$morehtmlref .= $langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1);
|
||||
$morehtmlref .= '<br>'.$object->thirdparty->getNomUrl(1, 'customer');
|
||||
// Project
|
||||
if (isModEnabled('project')) {
|
||||
$langs->load("projects");
|
||||
$morehtmlref .= '<br>'.$langs->trans('Project').' ';
|
||||
if ($user->rights->ficheinter->creer) {
|
||||
$morehtmlref .= '<br>';
|
||||
if ($usercancreate && 0) {
|
||||
$morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"');
|
||||
if ($action != 'classify') {
|
||||
//$morehtmlref.='<a class="editfielda" href="' . $_SERVER['PHP_SELF'] . '?action=classify&token='.newToken().'&id=' . $object->id . '">' . img_edit($langs->transnoentitiesnoconv('SetProject')) . '</a> : ';
|
||||
$morehtmlref .= ' : ';
|
||||
}
|
||||
if ($action == 'classify') {
|
||||
//$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1);
|
||||
$morehtmlref .= '<form method="post" action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'">';
|
||||
$morehtmlref .= '<input type="hidden" name="action" value="classin">';
|
||||
$morehtmlref .= '<input type="hidden" name="token" value="'.newToken().'">';
|
||||
$morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1);
|
||||
$morehtmlref .= '<input type="submit" class="button valignmiddle" value="'.$langs->trans("Modify").'">';
|
||||
$morehtmlref .= '</form>';
|
||||
} else {
|
||||
$morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1, '', 'maxwidth300');
|
||||
$morehtmlref .= '<a class="editfielda" href="'.$_SERVER['PHP_SELF'].'?action=classify&token='.newToken().'&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetProject')).'</a> ';
|
||||
}
|
||||
$morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, 0, 0, 1, '', 'maxwidth300');
|
||||
} else {
|
||||
if (!empty($object->fk_project)) {
|
||||
$proj = new Project($db);
|
||||
$proj->fetch($object->fk_project);
|
||||
$morehtmlref .= ' : '.$proj->getNomUrl(1);
|
||||
$morehtmlref .= $proj->getNomUrl(1);
|
||||
if ($proj->title) {
|
||||
$morehtmlref .= ' - '.$proj->title;
|
||||
$morehtmlref .= '<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).'</span>';
|
||||
}
|
||||
} else {
|
||||
$morehtmlref .= '';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -119,40 +119,30 @@ if ($object->id) {
|
||||
|
||||
$morehtmlref = '<div class="refidno">';
|
||||
// Ref customer
|
||||
//$morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1);
|
||||
//$morehtmlref.=$form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1);
|
||||
//$morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, $user->rights->ficheinter->creer, 'string', '', 0, 1);
|
||||
//$morehtmlref.=$form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, $user->rights->ficheinter->creer, 'string', '', null, null, '', 1);
|
||||
$morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1);
|
||||
$morehtmlref.=$form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1);
|
||||
// Thirdparty
|
||||
$morehtmlref .= $langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1);
|
||||
$morehtmlref .= '<br>'.$object->thirdparty->getNomUrl(1, 'customer');
|
||||
// Project
|
||||
if (isModEnabled('project')) {
|
||||
$langs->load("projects");
|
||||
$morehtmlref .= '<br>'.$langs->trans('Project').' ';
|
||||
if ($user->hasRight('commande', 'creer')) {
|
||||
$morehtmlref .= '<br>';
|
||||
if ($usercancreate && 0) {
|
||||
$morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"');
|
||||
if ($action != 'classify') {
|
||||
//$morehtmlref.='<a class="editfielda" href="' . $_SERVER['PHP_SELF'] . '?action=classify&token='.newToken().'&id=' . $object->id . '">' . img_edit($langs->transnoentitiesnoconv('SetProject')) . '</a> : ';
|
||||
$morehtmlref .= ' : ';
|
||||
}
|
||||
if ($action == 'classify') {
|
||||
//$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1);
|
||||
$morehtmlref .= '<form method="post" action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'">';
|
||||
$morehtmlref .= '<input type="hidden" name="action" value="classin">';
|
||||
$morehtmlref .= '<input type="hidden" name="token" value="'.newToken().'">';
|
||||
$morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1);
|
||||
$morehtmlref .= '<input type="submit" class="button valignmiddle" value="'.$langs->trans("Modify").'">';
|
||||
$morehtmlref .= '</form>';
|
||||
} else {
|
||||
$morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1, '', 'maxwidth300');
|
||||
$morehtmlref .= '<a class="editfielda" href="'.$_SERVER['PHP_SELF'].'?action=classify&token='.newToken().'&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetProject')).'</a> ';
|
||||
}
|
||||
$morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, 0, 0, 1, '', 'maxwidth300');
|
||||
} else {
|
||||
if (!empty($object->fk_project)) {
|
||||
$proj = new Project($db);
|
||||
$proj->fetch($object->fk_project);
|
||||
$morehtmlref .= ' : '.$proj->getNomUrl(1);
|
||||
$morehtmlref .= $proj->getNomUrl(1);
|
||||
if ($proj->title) {
|
||||
$morehtmlref .= ' - '.$proj->title;
|
||||
$morehtmlref .= '<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).'</span>';
|
||||
}
|
||||
} else {
|
||||
$morehtmlref .= '';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,132 +0,0 @@
|
||||
<?php
|
||||
/* Copyright (C) 2005-2009 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2009-2016 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2011 Juanjo Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2017 Ferran Marcet <fmarcet@2byte.es>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file htdocs/fichinter/info.php
|
||||
* \ingroup fichinter
|
||||
* \brief Page d'affichage des infos d'une fiche d'intervention
|
||||
*/
|
||||
|
||||
// Load Dolibarr environment
|
||||
require '../main.inc.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/fichinter/class/fichinter.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/fichinter.lib.php';
|
||||
if (isModEnabled('project')) {
|
||||
require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
|
||||
}
|
||||
|
||||
// Load translation files required by the page
|
||||
$langs->loadLangs(array('companies', 'interventions'));
|
||||
|
||||
$socid = 0;
|
||||
$id = GETPOST('id', 'int');
|
||||
$ref = GETPOST('ref', 'alpha');
|
||||
|
||||
// Security check
|
||||
if ($user->socid) {
|
||||
$socid = $user->socid;
|
||||
}
|
||||
$result = restrictedArea($user, 'ficheinter', $id, 'fichinter');
|
||||
|
||||
$object = new Fichinter($db);
|
||||
|
||||
if (!$object->fetch($id, $ref) > 0) {
|
||||
dol_print_error($db);
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* View
|
||||
*/
|
||||
|
||||
$form = new Form($db);
|
||||
|
||||
llxHeader('', $langs->trans("Intervention"));
|
||||
|
||||
$object->fetch_thirdparty();
|
||||
$object->info($object->id);
|
||||
|
||||
$head = fichinter_prepare_head($object);
|
||||
print dol_get_fiche_head($head, 'info', $langs->trans('InterventionCard'), -1, 'intervention');
|
||||
|
||||
// Intervention card
|
||||
$linkback = '<a href="'.DOL_URL_ROOT.'/fichinter/list.php?restore_lastsearch_values=1'.(!empty($socid) ? '&socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>';
|
||||
|
||||
|
||||
$morehtmlref = '<div class="refidno">';
|
||||
// Ref customer
|
||||
//$morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1);
|
||||
//$morehtmlref.=$form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1);
|
||||
// Thirdparty
|
||||
$morehtmlref .= $langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1);
|
||||
// Project
|
||||
if (isModEnabled('project')) {
|
||||
$langs->load("projects");
|
||||
$morehtmlref .= '<br>'.$langs->trans('Project').' ';
|
||||
if ($user->hasRight('commande', 'creer')) {
|
||||
if ($action != 'classify') {
|
||||
//$morehtmlref.='<a class="editfielda" href="' . $_SERVER['PHP_SELF'] . '?action=classify&token='.newToken().'&id=' . $object->id . '">' . img_edit($langs->transnoentitiesnoconv('SetProject')) . '</a> : ';
|
||||
$morehtmlref .= ' : ';
|
||||
}
|
||||
if ($action == 'classify') {
|
||||
//$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1);
|
||||
$morehtmlref .= '<form method="post" action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'">';
|
||||
$morehtmlref .= '<input type="hidden" name="action" value="classin">';
|
||||
$morehtmlref .= '<input type="hidden" name="token" value="'.newToken().'">';
|
||||
$morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1);
|
||||
$morehtmlref .= '<input type="submit" class="button valignmiddle" value="'.$langs->trans("Modify").'">';
|
||||
$morehtmlref .= '</form>';
|
||||
} else {
|
||||
$morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1, '', 'maxwidth300');
|
||||
}
|
||||
} else {
|
||||
if (!empty($object->fk_project)) {
|
||||
$proj = new Project($db);
|
||||
$proj->fetch($object->fk_project);
|
||||
$morehtmlref .= ' : '.$proj->getNomUrl(1);
|
||||
if ($proj->title) {
|
||||
$morehtmlref .= ' - '.$proj->title;
|
||||
}
|
||||
} else {
|
||||
$morehtmlref .= '';
|
||||
}
|
||||
}
|
||||
}
|
||||
$morehtmlref .= '</div>';
|
||||
|
||||
dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref);
|
||||
|
||||
print '<div class="fichecenter">';
|
||||
print '<div class="underbanner clearboth"></div>';
|
||||
|
||||
print '<br>';
|
||||
|
||||
print '<table width="100%"><tr><td>';
|
||||
dol_print_object_info($object);
|
||||
print '</td></tr></table>';
|
||||
|
||||
print '</div>';
|
||||
|
||||
print dol_get_fiche_end();
|
||||
|
||||
llxFooter();
|
||||
$db->close();
|
||||
@ -84,40 +84,30 @@ if ($id > 0 || !empty($ref)) {
|
||||
|
||||
$morehtmlref = '<div class="refidno">';
|
||||
// Ref customer
|
||||
//$morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1);
|
||||
//$morehtmlref.=$form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1);
|
||||
//$morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, $user->rights->ficheinter->creer, 'string', '', 0, 1);
|
||||
//$morehtmlref.=$form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, $user->rights->ficheinter->creer, 'string', '', null, null, '', 1);
|
||||
$morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1);
|
||||
$morehtmlref.=$form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1);
|
||||
// Thirdparty
|
||||
$morehtmlref .= $langs->trans('ThirdParty').' : '.$object->thirdparty->getNomUrl(1);
|
||||
$morehtmlref .= '<br>'.$object->thirdparty->getNomUrl(1, 'customer');
|
||||
// Project
|
||||
if (isModEnabled('project')) {
|
||||
$langs->load("projects");
|
||||
$morehtmlref .= '<br>'.$langs->trans('Project').' ';
|
||||
if ($user->hasRight('commande', 'creer')) {
|
||||
$morehtmlref .= '<br>';
|
||||
if ($usercancreate && 0) {
|
||||
$morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"');
|
||||
if ($action != 'classify') {
|
||||
//$morehtmlref.='<a class="editfielda" href="' . $_SERVER['PHP_SELF'] . '?action=classify&token='.newToken().'&id=' . $object->id . '">' . img_edit($langs->transnoentitiesnoconv('SetProject')) . '</a> : ';
|
||||
$morehtmlref .= ' : ';
|
||||
}
|
||||
if ($action == 'classify') {
|
||||
//$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1);
|
||||
$morehtmlref .= '<form method="post" action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'">';
|
||||
$morehtmlref .= '<input type="hidden" name="action" value="classin">';
|
||||
$morehtmlref .= '<input type="hidden" name="token" value="'.newToken().'">';
|
||||
$morehtmlref .= $formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1);
|
||||
$morehtmlref .= '<input type="submit" class="button valignmiddle" value="'.$langs->trans("Modify").'">';
|
||||
$morehtmlref .= '</form>';
|
||||
} else {
|
||||
$morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1, '', 'maxwidth300');
|
||||
$morehtmlref .= '<a class="editfielda" href="'.$_SERVER['PHP_SELF'].'?action=classify&token='.newToken().'&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetProject')).'</a> ';
|
||||
}
|
||||
$morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, 0, 0, 1, '', 'maxwidth300');
|
||||
} else {
|
||||
if (!empty($object->fk_project)) {
|
||||
$proj = new Project($db);
|
||||
$proj->fetch($object->fk_project);
|
||||
$morehtmlref .= ' : '.$proj->getNomUrl(1);
|
||||
$morehtmlref .= $proj->getNomUrl(1);
|
||||
if ($proj->title) {
|
||||
$morehtmlref .= ' - '.$proj->title;
|
||||
$morehtmlref .= '<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).'</span>';
|
||||
}
|
||||
} else {
|
||||
$morehtmlref .= '';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -649,7 +649,7 @@ class FactureFournisseur extends CommonInvoice
|
||||
$res = $this->updateline(
|
||||
$idligne,
|
||||
$this->lines[$i]->description,
|
||||
$this->lines[$i]->pu_ht,
|
||||
$this->lines[$i]->subprice,
|
||||
$this->lines[$i]->tva_tx.($this->lines[$i]->vat_src_code ? ' ('.$this->lines[$i]->vat_src_code.')' : ''),
|
||||
$this->lines[$i]->localtax1_tx,
|
||||
$this->lines[$i]->localtax2_tx,
|
||||
@ -1824,12 +1824,11 @@ class FactureFournisseur extends CommonInvoice
|
||||
$cpt = count($this->lines);
|
||||
for ($i = 0; $i < $cpt; $i++) {
|
||||
if ($this->lines[$i]->fk_product > 0) {
|
||||
$this->line = $this->lines[$i];
|
||||
$mouvP = new MouvementStock($this->db);
|
||||
$mouvP->origin = &$this;
|
||||
$mouvP->setOrigin($this->element, $this->id);
|
||||
// We increase stock for product
|
||||
$up_ht_disc = $this->lines[$i]->pu_ht;
|
||||
$up_ht_disc = $this->lines[$i]->subprice;
|
||||
if (!empty($this->lines[$i]->remise_percent) && empty($conf->global->STOCK_EXCLUDE_DISCOUNT_FOR_PMP)) {
|
||||
$up_ht_disc = price2num($up_ht_disc * (100 - $this->lines[$i]->remise_percent) / 100, 'MU');
|
||||
}
|
||||
@ -1841,7 +1840,6 @@ class FactureFournisseur extends CommonInvoice
|
||||
if ($result < 0) {
|
||||
$error++;
|
||||
}
|
||||
unset($this->line);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2174,61 +2172,61 @@ class FactureFournisseur extends CommonInvoice
|
||||
}
|
||||
|
||||
// Insert line
|
||||
$this->line = new SupplierInvoiceLine($this->db);
|
||||
$supplierinvoiceline = new SupplierInvoiceLine($this->db);
|
||||
|
||||
$this->line->context = $this->context;
|
||||
$supplierinvoiceline->context = $this->context;
|
||||
|
||||
$this->line->fk_facture_fourn = $this->id;
|
||||
//$this->line->label=$label; // deprecated
|
||||
$this->line->desc = $desc;
|
||||
$this->line->ref_supplier = $ref_supplier;
|
||||
$supplierinvoiceline->fk_facture_fourn = $this->id;
|
||||
//$supplierinvoiceline->label=$label; // deprecated
|
||||
$supplierinvoiceline->desc = $desc;
|
||||
$supplierinvoiceline->ref_supplier = $ref_supplier;
|
||||
|
||||
$this->line->qty = ($this->type == self::TYPE_CREDIT_NOTE ? abs($qty) : $qty); // For credit note, quantity is always positive and unit price negative
|
||||
$this->line->subprice = ($this->type == self::TYPE_CREDIT_NOTE ? -abs($pu_ht) : $pu_ht); // For credit note, unit price always negative, always positive otherwise
|
||||
$supplierinvoiceline->qty = ($this->type == self::TYPE_CREDIT_NOTE ? abs($qty) : $qty); // For credit note, quantity is always positive and unit price negative
|
||||
$supplierinvoiceline->subprice = ($this->type == self::TYPE_CREDIT_NOTE ? -abs($pu_ht) : $pu_ht); // For credit note, unit price always negative, always positive otherwise
|
||||
|
||||
$this->line->vat_src_code = $vat_src_code;
|
||||
$this->line->tva_tx = $txtva;
|
||||
$this->line->localtax1_tx = ($total_localtax1 ? $localtaxes_type[1] : 0);
|
||||
$this->line->localtax2_tx = ($total_localtax2 ? $localtaxes_type[3] : 0);
|
||||
$this->line->localtax1_type = empty($localtaxes_type[0]) ? '' : $localtaxes_type[0];
|
||||
$this->line->localtax2_type = empty($localtaxes_type[2]) ? '' : $localtaxes_type[2];
|
||||
$supplierinvoiceline->vat_src_code = $vat_src_code;
|
||||
$supplierinvoiceline->tva_tx = $txtva;
|
||||
$supplierinvoiceline->localtax1_tx = ($total_localtax1 ? $localtaxes_type[1] : 0);
|
||||
$supplierinvoiceline->localtax2_tx = ($total_localtax2 ? $localtaxes_type[3] : 0);
|
||||
$supplierinvoiceline->localtax1_type = empty($localtaxes_type[0]) ? '' : $localtaxes_type[0];
|
||||
$supplierinvoiceline->localtax2_type = empty($localtaxes_type[2]) ? '' : $localtaxes_type[2];
|
||||
|
||||
$this->line->total_ht = (($this->type == self::TYPE_CREDIT_NOTE || $qty < 0) ? -abs($total_ht) : $total_ht); // For credit note and if qty is negative, total is negative
|
||||
$this->line->total_tva = (($this->type == self::TYPE_CREDIT_NOTE || $qty < 0) ? -abs($total_tva) : $total_tva); // For credit note and if qty is negative, total is negative
|
||||
$this->line->total_localtax1 = (($this->type == self::TYPE_CREDIT_NOTE || $qty < 0) ? -abs($total_localtax1) : $total_localtax1); // For credit note and if qty is negative, total is negative
|
||||
$this->line->total_localtax2 = (($this->type == self::TYPE_CREDIT_NOTE || $qty < 0) ? -abs($total_localtax2) : $total_localtax2); // For credit note and if qty is negative, total is negative
|
||||
$this->line->total_ttc = (($this->type == self::TYPE_CREDIT_NOTE || $qty < 0) ? -abs($total_ttc) : $total_ttc); // For credit note and if qty is negative, total is negative
|
||||
$supplierinvoiceline->total_ht = (($this->type == self::TYPE_CREDIT_NOTE || $qty < 0) ? -abs($total_ht) : $total_ht); // For credit note and if qty is negative, total is negative
|
||||
$supplierinvoiceline->total_tva = (($this->type == self::TYPE_CREDIT_NOTE || $qty < 0) ? -abs($total_tva) : $total_tva); // For credit note and if qty is negative, total is negative
|
||||
$supplierinvoiceline->total_localtax1 = (($this->type == self::TYPE_CREDIT_NOTE || $qty < 0) ? -abs($total_localtax1) : $total_localtax1); // For credit note and if qty is negative, total is negative
|
||||
$supplierinvoiceline->total_localtax2 = (($this->type == self::TYPE_CREDIT_NOTE || $qty < 0) ? -abs($total_localtax2) : $total_localtax2); // For credit note and if qty is negative, total is negative
|
||||
$supplierinvoiceline->total_ttc = (($this->type == self::TYPE_CREDIT_NOTE || $qty < 0) ? -abs($total_ttc) : $total_ttc); // For credit note and if qty is negative, total is negative
|
||||
|
||||
$this->line->fk_product = $fk_product;
|
||||
$this->line->product_type = $type;
|
||||
$this->line->remise_percent = $remise_percent;
|
||||
$this->line->date_start = $date_start;
|
||||
$this->line->date_end = $date_end;
|
||||
$this->line->fk_code_ventilation = $ventil;
|
||||
$this->line->rang = $rang;
|
||||
$this->line->info_bits = $info_bits;
|
||||
$this->line->fk_remise_except = $fk_remise_except;
|
||||
$supplierinvoiceline->fk_product = $fk_product;
|
||||
$supplierinvoiceline->product_type = $type;
|
||||
$supplierinvoiceline->remise_percent = $remise_percent;
|
||||
$supplierinvoiceline->date_start = $date_start;
|
||||
$supplierinvoiceline->date_end = $date_end;
|
||||
$supplierinvoiceline->fk_code_ventilation = $ventil;
|
||||
$supplierinvoiceline->rang = $rang;
|
||||
$supplierinvoiceline->info_bits = $info_bits;
|
||||
$supplierinvoiceline->fk_remise_except = $fk_remise_except;
|
||||
|
||||
$this->line->special_code = ((string) $special_code != '' ? $special_code : $this->special_code);
|
||||
$this->line->fk_parent_line = $fk_parent_line;
|
||||
$this->line->origin = $this->origin;
|
||||
$this->line->origin_id = $origin_id;
|
||||
$this->line->fk_unit = $fk_unit;
|
||||
$supplierinvoiceline->special_code = ((string) $special_code != '' ? $special_code : $this->special_code);
|
||||
$supplierinvoiceline->fk_parent_line = $fk_parent_line;
|
||||
$supplierinvoiceline->origin = $this->origin;
|
||||
$supplierinvoiceline->origin_id = $origin_id;
|
||||
$supplierinvoiceline->fk_unit = $fk_unit;
|
||||
|
||||
// Multicurrency
|
||||
$this->line->fk_multicurrency = $this->fk_multicurrency;
|
||||
$this->line->multicurrency_code = $this->multicurrency_code;
|
||||
$this->line->multicurrency_subprice = ($this->type == self::TYPE_CREDIT_NOTE ? -abs($pu_ht_devise) : $pu_ht_devise); // For credit note, unit price always negative, always positive otherwise
|
||||
$supplierinvoiceline->fk_multicurrency = $this->fk_multicurrency;
|
||||
$supplierinvoiceline->multicurrency_code = $this->multicurrency_code;
|
||||
$supplierinvoiceline->multicurrency_subprice = ($this->type == self::TYPE_CREDIT_NOTE ? -abs($pu_ht_devise) : $pu_ht_devise); // For credit note, unit price always negative, always positive otherwise
|
||||
|
||||
$this->line->multicurrency_total_ht = (($this->type == self::TYPE_CREDIT_NOTE || $qty < 0) ? -abs($multicurrency_total_ht) : $multicurrency_total_ht); // For credit note and if qty is negative, total is negative
|
||||
$this->line->multicurrency_total_tva = (($this->type == self::TYPE_CREDIT_NOTE || $qty < 0) ? -abs($multicurrency_total_tva) : $multicurrency_total_tva); // For credit note and if qty is negative, total is negative
|
||||
$this->line->multicurrency_total_ttc = (($this->type == self::TYPE_CREDIT_NOTE || $qty < 0) ? -abs($multicurrency_total_ttc) : $multicurrency_total_ttc); // For credit note and if qty is negative, total is negative
|
||||
$supplierinvoiceline->multicurrency_total_ht = (($this->type == self::TYPE_CREDIT_NOTE || $qty < 0) ? -abs($multicurrency_total_ht) : $multicurrency_total_ht); // For credit note and if qty is negative, total is negative
|
||||
$supplierinvoiceline->multicurrency_total_tva = (($this->type == self::TYPE_CREDIT_NOTE || $qty < 0) ? -abs($multicurrency_total_tva) : $multicurrency_total_tva); // For credit note and if qty is negative, total is negative
|
||||
$supplierinvoiceline->multicurrency_total_ttc = (($this->type == self::TYPE_CREDIT_NOTE || $qty < 0) ? -abs($multicurrency_total_ttc) : $multicurrency_total_ttc); // For credit note and if qty is negative, total is negative
|
||||
|
||||
if (is_array($array_options) && count($array_options) > 0) {
|
||||
$this->line->array_options = $array_options;
|
||||
$supplierinvoiceline->array_options = $array_options;
|
||||
}
|
||||
|
||||
$result = $this->line->insert($notrigger);
|
||||
$result = $supplierinvoiceline->insert($notrigger);
|
||||
if ($result > 0) {
|
||||
// Reorder if child line
|
||||
if (!empty($fk_parent_line)) {
|
||||
@ -2244,15 +2242,15 @@ class FactureFournisseur extends CommonInvoice
|
||||
$result = $this->update_price(1, 'auto', 0, $this->thirdparty); // The addline method is designed to add line from user input so total calculation with update_price must be done using 'auto' mode.
|
||||
if ($result > 0) {
|
||||
$this->db->commit();
|
||||
return $this->line->id;
|
||||
return $supplierinvoiceline->id;
|
||||
} else {
|
||||
$this->error = $this->db->error();
|
||||
$this->db->rollback();
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
$this->error = $this->line->error;
|
||||
$this->errors = $this->line->errors;
|
||||
$this->error = $supplierinvoiceline->error;
|
||||
$this->errors = $supplierinvoiceline->errors;
|
||||
$this->db->rollback();
|
||||
return -2;
|
||||
}
|
||||
|
||||
@ -1497,9 +1497,11 @@ class Holiday extends CommonObject
|
||||
}
|
||||
|
||||
$out .= '</select>'."\n";
|
||||
$out .= ajax_combobox($htmlname);
|
||||
|
||||
print $out;
|
||||
$showempty= 0;
|
||||
$out .= ajax_combobox($htmlname, array(), 0, 0, 'resolve', ($showempty < 0 ? (string) $showempty : '-1'), $morecss);
|
||||
|
||||
return $out;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -2488,7 +2490,7 @@ class Holiday extends CommonObject
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
if (property_exists($this, 'fk_type')) {
|
||||
$return .= '<br><span class="opacitymedium">'.$langs->trans("Type").'</span> : ';
|
||||
$return .= '<span class="info_box-label maxwidth100">'.arraydata['labeltype'].'</span>';
|
||||
$return .= '<span class="info_box-label maxwidth100">'.$arraydata['labeltype'].'</span>';
|
||||
}
|
||||
if (property_exists($this, 'date_debut') && property_exists($this, 'date_fin')) {
|
||||
$return .= '<br><span class="info-box-label">'.dol_print_date($this->date_debut, 'day').'</span>';
|
||||
|
||||
@ -363,6 +363,7 @@ if (count($typeleaves) == 0) {
|
||||
print_liste_field_titre((empty($user->rights->holiday->define_holiday) ? '' : 'Note'), $_SERVER["PHP_SELF"]);
|
||||
print_liste_field_titre('');
|
||||
|
||||
$selectedfields = '';
|
||||
if ($massactionbutton) {
|
||||
$selectedfields = $form->showCheckAddButtons('checkforselect', 1);
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -6,6 +6,7 @@
|
||||
* Copyright (C) 2012 Marcos García <marcosgdf@gmail.com>
|
||||
* Copyright (C) 2016 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
|
||||
* Copyright (C) 2021 Charlene Benke <charlene@patas-monkey.com>
|
||||
* Copyright (C) 2023 Alexandre Janniaux <alexandre.janniaux@gmail.com>
|
||||
*
|
||||
* 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
|
||||
@ -70,6 +71,92 @@ $conffiletoshow = "htdocs/conf/conf.php";
|
||||
//$conffile = "/etc/dolibarr/conf.php";
|
||||
//$conffiletoshow = "/etc/dolibarr/conf.php";
|
||||
|
||||
$short_options = "c:h";
|
||||
$long_options = array(
|
||||
"config:",
|
||||
"help",
|
||||
);
|
||||
|
||||
/**
|
||||
* Print the usage when executing scripts from install/.
|
||||
*
|
||||
* Print the help text exposing the available options when executing
|
||||
* update or install script (ie. from htdocs/install/) from CLI with
|
||||
* the `php` executable. This function does not `exit` the program and
|
||||
* the caller should then call `exit` themselves since they should
|
||||
* determine whether it was an error or not.
|
||||
*
|
||||
* @param string $program the script that was originally run
|
||||
* @param string $header the message to signal to the user
|
||||
* @return void
|
||||
*/
|
||||
function usage($program, $header)
|
||||
{
|
||||
echo $header."\n";
|
||||
echo " php ".$program." [options] previous_version new_version [script options]\n";
|
||||
echo "\n";
|
||||
echo "Script options when using upgrade.php:\n";
|
||||
echo "\n";
|
||||
echo " dirmodule:\n";
|
||||
echo " Specify dirmodule to provide a path for an external module\n";
|
||||
echo " so the migration is done using a script from a module.\n";
|
||||
echo "\n";
|
||||
echo " ignoredbversion:\n";
|
||||
echo " Allow to run migration even if database version does\n";
|
||||
echo " not match start version of migration.\n";
|
||||
echo "\n";
|
||||
echo "Script options when using upgrade2.php:\n";
|
||||
echo "\n";
|
||||
echo " MODULE_NAME1_TO_ENABLE,MODULE_NAME2_TO_ENABLE:\n";
|
||||
echo " Specify a list of module-name to enable, joined by comma.\n";
|
||||
echo "\n";
|
||||
echo "Options:\n";
|
||||
echo " -c, --config <filename>:\n";
|
||||
echo " Provide a different conf.php file to use.\n";
|
||||
echo "\n";
|
||||
echo " -h, --help:\n";
|
||||
echo " Display this help message.\n";
|
||||
}
|
||||
|
||||
if (php_sapi_name() === "cli") {
|
||||
$rest_index = 0;
|
||||
$opts = getopt($short_options, $long_options, $rest_index);
|
||||
|
||||
foreach ($opts as $opt => $arg) switch ($opt) {
|
||||
case 'c':
|
||||
case 'config':
|
||||
$conffile = $arg;
|
||||
$conffiletoshow = $arg;
|
||||
break;
|
||||
case 'h':
|
||||
case 'help':
|
||||
usage($argv[0], "Usage:");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
// In the following test, only dash-prefixed arguments will trigger an
|
||||
// error, given that scripts options can allow a variable number of
|
||||
// additional non-prefixed argument and we mostly want to check for
|
||||
// typo right now.
|
||||
if ($rest_index < $argc && $argv[$rest_index][0] == "-") {
|
||||
usage($argv[0], "Unknown option ".$argv[$rest_index]. ", usage:");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// Currently, scripts using inc.php will require addtional arguments,
|
||||
// see help above for more details.
|
||||
if ($rest_index > $argc - 2) {
|
||||
usage($argv[0], "Missing mandatory arguments, usage:");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// Tricky argument list hack, should be removed someday.
|
||||
// Reset argv to remove the argument that were parsed. This is needed
|
||||
// currently because some install code, like in upgrade.php, are using
|
||||
// $argv[] directly with fixed index to fetch some arguments.
|
||||
$argv = array_merge(array($argv[0]), array_slice($argv, $rest_index));
|
||||
$argc = count($argv);
|
||||
}
|
||||
|
||||
// Load conf file if it is already defined
|
||||
if (!defined('DONOTLOADCONF') && file_exists($conffile) && filesize($conffile) > 8) { // Test on filesize is to ensure that conf file is more that an empty template with just <?php in first line
|
||||
|
||||
@ -278,6 +278,262 @@ INSERT INTO llx_c_country (rowid, code, code_iso, label, active, favorite) VALUE
|
||||
INSERT INTO llx_c_country (rowid, code, code_iso, label, active, favorite) VALUES (247, 'XK', 'XKX', 'Kosovo', 1, 0);
|
||||
|
||||
|
||||
|
||||
UPDATE llx_c_country SET numeric_code = '004' WHERE code_iso = 'AFG';
|
||||
UPDATE llx_c_country SET numeric_code = '248' WHERE code_iso = 'ALA';
|
||||
UPDATE llx_c_country SET numeric_code = '008' WHERE code_iso = 'ALB';
|
||||
UPDATE llx_c_country SET numeric_code = '276' WHERE code_iso = 'DEU';
|
||||
UPDATE llx_c_country SET numeric_code = '020' WHERE code_iso = 'AND';
|
||||
UPDATE llx_c_country SET numeric_code = '024' WHERE code_iso = 'AGO';
|
||||
UPDATE llx_c_country SET numeric_code = '660' WHERE code_iso = 'AIA';
|
||||
UPDATE llx_c_country SET numeric_code = '010' WHERE code_iso = 'ATA';
|
||||
UPDATE llx_c_country SET numeric_code = '028' WHERE code_iso = 'ATG';
|
||||
UPDATE llx_c_country SET numeric_code = '682' WHERE code_iso = 'SAU';
|
||||
UPDATE llx_c_country SET numeric_code = '012' WHERE code_iso = 'DZA';
|
||||
UPDATE llx_c_country SET numeric_code = '032' WHERE code_iso = 'ARG';
|
||||
UPDATE llx_c_country SET numeric_code = '051' WHERE code_iso = 'ARM';
|
||||
UPDATE llx_c_country SET numeric_code = '533' WHERE code_iso = 'ABW';
|
||||
UPDATE llx_c_country SET numeric_code = '036' WHERE code_iso = 'AUS';
|
||||
UPDATE llx_c_country SET numeric_code = '040' WHERE code_iso = 'AUT';
|
||||
UPDATE llx_c_country SET numeric_code = '031' WHERE code_iso = 'AZE';
|
||||
UPDATE llx_c_country SET numeric_code = '044' WHERE code_iso = 'BHS';
|
||||
UPDATE llx_c_country SET numeric_code = '050' WHERE code_iso = 'BGD';
|
||||
UPDATE llx_c_country SET numeric_code = '052' WHERE code_iso = 'BRB';
|
||||
UPDATE llx_c_country SET numeric_code = '048' WHERE code_iso = 'BHR';
|
||||
UPDATE llx_c_country SET numeric_code = '056' WHERE code_iso = 'BEL';
|
||||
UPDATE llx_c_country SET numeric_code = '084' WHERE code_iso = 'BLZ';
|
||||
UPDATE llx_c_country SET numeric_code = '204' WHERE code_iso = 'BEN';
|
||||
UPDATE llx_c_country SET numeric_code = '060' WHERE code_iso = 'BMU';
|
||||
UPDATE llx_c_country SET numeric_code = '112' WHERE code_iso = 'BLR';
|
||||
UPDATE llx_c_country SET numeric_code = '068' WHERE code_iso = 'BOL';
|
||||
UPDATE llx_c_country SET numeric_code = '535' WHERE code_iso = 'BES';
|
||||
UPDATE llx_c_country SET numeric_code = '070' WHERE code_iso = 'BIH';
|
||||
UPDATE llx_c_country SET numeric_code = '072' WHERE code_iso = 'BWA';
|
||||
UPDATE llx_c_country SET numeric_code = '076' WHERE code_iso = 'BRA';
|
||||
UPDATE llx_c_country SET numeric_code = '096' WHERE code_iso = 'BRN';
|
||||
UPDATE llx_c_country SET numeric_code = '100' WHERE code_iso = 'BGR';
|
||||
UPDATE llx_c_country SET numeric_code = '854' WHERE code_iso = 'BFA';
|
||||
UPDATE llx_c_country SET numeric_code = '108' WHERE code_iso = 'BDI';
|
||||
UPDATE llx_c_country SET numeric_code = '064' WHERE code_iso = 'BTN';
|
||||
UPDATE llx_c_country SET numeric_code = '132' WHERE code_iso = 'CPV';
|
||||
UPDATE llx_c_country SET numeric_code = '116' WHERE code_iso = 'KHM';
|
||||
UPDATE llx_c_country SET numeric_code = '120' WHERE code_iso = 'CMR';
|
||||
UPDATE llx_c_country SET numeric_code = '124' WHERE code_iso = 'CAN';
|
||||
UPDATE llx_c_country SET numeric_code = '634' WHERE code_iso = 'QAT';
|
||||
UPDATE llx_c_country SET numeric_code = '148' WHERE code_iso = 'TCD';
|
||||
UPDATE llx_c_country SET numeric_code = '152' WHERE code_iso = 'CHL';
|
||||
UPDATE llx_c_country SET numeric_code = '156' WHERE code_iso = 'CHN';
|
||||
UPDATE llx_c_country SET numeric_code = '196' WHERE code_iso = 'CYP';
|
||||
UPDATE llx_c_country SET numeric_code = '170' WHERE code_iso = 'COL';
|
||||
UPDATE llx_c_country SET numeric_code = '174' WHERE code_iso = 'COM';
|
||||
UPDATE llx_c_country SET numeric_code = '408' WHERE code_iso = 'PRK';
|
||||
UPDATE llx_c_country SET numeric_code = '410' WHERE code_iso = 'KOR';
|
||||
UPDATE llx_c_country SET numeric_code = '384' WHERE code_iso = 'CIV';
|
||||
UPDATE llx_c_country SET numeric_code = '188' WHERE code_iso = 'CRI';
|
||||
UPDATE llx_c_country SET numeric_code = '191' WHERE code_iso = 'HRV';
|
||||
UPDATE llx_c_country SET numeric_code = '192' WHERE code_iso = 'CUB';
|
||||
UPDATE llx_c_country SET numeric_code = '531' WHERE code_iso = 'CUW';
|
||||
UPDATE llx_c_country SET numeric_code = '208' WHERE code_iso = 'DNK';
|
||||
UPDATE llx_c_country SET numeric_code = '212' WHERE code_iso = 'DMA';
|
||||
UPDATE llx_c_country SET numeric_code = '218' WHERE code_iso = 'ECU';
|
||||
UPDATE llx_c_country SET numeric_code = '818' WHERE code_iso = 'EGY';
|
||||
UPDATE llx_c_country SET numeric_code = '222' WHERE code_iso = 'SLV';
|
||||
UPDATE llx_c_country SET numeric_code = '784' WHERE code_iso = 'ARE';
|
||||
UPDATE llx_c_country SET numeric_code = '232' WHERE code_iso = 'ERI';
|
||||
UPDATE llx_c_country SET numeric_code = '703' WHERE code_iso = 'SVK';
|
||||
UPDATE llx_c_country SET numeric_code = '705' WHERE code_iso = 'SVN';
|
||||
UPDATE llx_c_country SET numeric_code = '724' WHERE code_iso = 'ESP';
|
||||
UPDATE llx_c_country SET numeric_code = '840' WHERE code_iso = 'USA';
|
||||
UPDATE llx_c_country SET numeric_code = '233' WHERE code_iso = 'EST';
|
||||
UPDATE llx_c_country SET numeric_code = '231' WHERE code_iso = 'ETH';
|
||||
UPDATE llx_c_country SET numeric_code = '608' WHERE code_iso = 'PHL';
|
||||
UPDATE llx_c_country SET numeric_code = '246' WHERE code_iso = 'FIN';
|
||||
UPDATE llx_c_country SET numeric_code = '242' WHERE code_iso = 'FJI';
|
||||
UPDATE llx_c_country SET numeric_code = '250' WHERE code_iso = 'FRA';
|
||||
UPDATE llx_c_country SET numeric_code = '266' WHERE code_iso = 'GAB';
|
||||
UPDATE llx_c_country SET numeric_code = '270' WHERE code_iso = 'GMB';
|
||||
UPDATE llx_c_country SET numeric_code = '268' WHERE code_iso = 'GEO';
|
||||
UPDATE llx_c_country SET numeric_code = '288' WHERE code_iso = 'GHA';
|
||||
UPDATE llx_c_country SET numeric_code = '292' WHERE code_iso = 'GIB';
|
||||
UPDATE llx_c_country SET numeric_code = '308' WHERE code_iso = 'GRD';
|
||||
UPDATE llx_c_country SET numeric_code = '300' WHERE code_iso = 'GRC';
|
||||
UPDATE llx_c_country SET numeric_code = '304' WHERE code_iso = 'GRL';
|
||||
UPDATE llx_c_country SET numeric_code = '312' WHERE code_iso = 'GLP';
|
||||
UPDATE llx_c_country SET numeric_code = '316' WHERE code_iso = 'GUM';
|
||||
UPDATE llx_c_country SET numeric_code = '320' WHERE code_iso = 'GTM';
|
||||
UPDATE llx_c_country SET numeric_code = '254' WHERE code_iso = 'GUF';
|
||||
UPDATE llx_c_country SET numeric_code = '831' WHERE code_iso = 'GGY';
|
||||
UPDATE llx_c_country SET numeric_code = '324' WHERE code_iso = 'GIN';
|
||||
UPDATE llx_c_country SET numeric_code = '624' WHERE code_iso = 'GNB';
|
||||
UPDATE llx_c_country SET numeric_code = '226' WHERE code_iso = 'GNQ';
|
||||
UPDATE llx_c_country SET numeric_code = '328' WHERE code_iso = 'GUY';
|
||||
UPDATE llx_c_country SET numeric_code = '332' WHERE code_iso = 'HTI';
|
||||
UPDATE llx_c_country SET numeric_code = '340' WHERE code_iso = 'HND';
|
||||
UPDATE llx_c_country SET numeric_code = '344' WHERE code_iso = 'HKG';
|
||||
UPDATE llx_c_country SET numeric_code = '348' WHERE code_iso = 'HUN';
|
||||
UPDATE llx_c_country SET numeric_code = '356' WHERE code_iso = 'IND';
|
||||
UPDATE llx_c_country SET numeric_code = '360' WHERE code_iso = 'IDN';
|
||||
UPDATE llx_c_country SET numeric_code = '368' WHERE code_iso = 'IRQ';
|
||||
UPDATE llx_c_country SET numeric_code = '364' WHERE code_iso = 'IRN';
|
||||
UPDATE llx_c_country SET numeric_code = '372' WHERE code_iso = 'IRL';
|
||||
UPDATE llx_c_country SET numeric_code = '074' WHERE code_iso = 'BVT';
|
||||
UPDATE llx_c_country SET numeric_code = '833' WHERE code_iso = 'IMN';
|
||||
UPDATE llx_c_country SET numeric_code = '162' WHERE code_iso = 'CXR';
|
||||
UPDATE llx_c_country SET numeric_code = '352' WHERE code_iso = 'ISL';
|
||||
UPDATE llx_c_country SET numeric_code = '136' WHERE code_iso = 'CYM';
|
||||
UPDATE llx_c_country SET numeric_code = '166' WHERE code_iso = 'CCK';
|
||||
UPDATE llx_c_country SET numeric_code = '184' WHERE code_iso = 'COK';
|
||||
UPDATE llx_c_country SET numeric_code = '234' WHERE code_iso = 'FRO';
|
||||
UPDATE llx_c_country SET numeric_code = '239' WHERE code_iso = 'SGS';
|
||||
UPDATE llx_c_country SET numeric_code = '334' WHERE code_iso = 'HMD';
|
||||
UPDATE llx_c_country SET numeric_code = '238' WHERE code_iso = 'FLK';
|
||||
UPDATE llx_c_country SET numeric_code = '580' WHERE code_iso = 'MNP';
|
||||
UPDATE llx_c_country SET numeric_code = '584' WHERE code_iso = 'MHL';
|
||||
UPDATE llx_c_country SET numeric_code = '612' WHERE code_iso = 'PCN';
|
||||
UPDATE llx_c_country SET numeric_code = '090' WHERE code_iso = 'SLB';
|
||||
UPDATE llx_c_country SET numeric_code = '796' WHERE code_iso = 'TCA';
|
||||
UPDATE llx_c_country SET numeric_code = '581' WHERE code_iso = 'UMI';
|
||||
UPDATE llx_c_country SET numeric_code = '092' WHERE code_iso = 'VGB';
|
||||
UPDATE llx_c_country SET numeric_code = '850' WHERE code_iso = 'VIR';
|
||||
UPDATE llx_c_country SET numeric_code = '376' WHERE code_iso = 'ISR';
|
||||
UPDATE llx_c_country SET numeric_code = '380' WHERE code_iso = 'ITA';
|
||||
UPDATE llx_c_country SET numeric_code = '388' WHERE code_iso = 'JAM';
|
||||
UPDATE llx_c_country SET numeric_code = '392' WHERE code_iso = 'JPN';
|
||||
UPDATE llx_c_country SET numeric_code = '832' WHERE code_iso = 'JEY';
|
||||
UPDATE llx_c_country SET numeric_code = '400' WHERE code_iso = 'JOR';
|
||||
UPDATE llx_c_country SET numeric_code = '398' WHERE code_iso = 'KAZ';
|
||||
UPDATE llx_c_country SET numeric_code = '404' WHERE code_iso = 'KEN';
|
||||
UPDATE llx_c_country SET numeric_code = '417' WHERE code_iso = 'KGZ';
|
||||
UPDATE llx_c_country SET numeric_code = '296' WHERE code_iso = 'KIR';
|
||||
UPDATE llx_c_country SET numeric_code = '414' WHERE code_iso = 'KWT';
|
||||
UPDATE llx_c_country SET numeric_code = '418' WHERE code_iso = 'LAO';
|
||||
UPDATE llx_c_country SET numeric_code = '426' WHERE code_iso = 'LSO';
|
||||
UPDATE llx_c_country SET numeric_code = '428' WHERE code_iso = 'LVA';
|
||||
UPDATE llx_c_country SET numeric_code = '422' WHERE code_iso = 'LBN';
|
||||
UPDATE llx_c_country SET numeric_code = '430' WHERE code_iso = 'LBR';
|
||||
UPDATE llx_c_country SET numeric_code = '434' WHERE code_iso = 'LBY';
|
||||
UPDATE llx_c_country SET numeric_code = '438' WHERE code_iso = 'LIE';
|
||||
UPDATE llx_c_country SET numeric_code = '440' WHERE code_iso = 'LTU';
|
||||
UPDATE llx_c_country SET numeric_code = '442' WHERE code_iso = 'LUX';
|
||||
UPDATE llx_c_country SET numeric_code = '446' WHERE code_iso = 'MAC';
|
||||
UPDATE llx_c_country SET numeric_code = '807' WHERE code_iso = 'MKD';
|
||||
UPDATE llx_c_country SET numeric_code = '450' WHERE code_iso = 'MDG';
|
||||
UPDATE llx_c_country SET numeric_code = '458' WHERE code_iso = 'MYS';
|
||||
UPDATE llx_c_country SET numeric_code = '454' WHERE code_iso = 'MWI';
|
||||
UPDATE llx_c_country SET numeric_code = '462' WHERE code_iso = 'MDV';
|
||||
UPDATE llx_c_country SET numeric_code = '466' WHERE code_iso = 'MLI';
|
||||
UPDATE llx_c_country SET numeric_code = '470' WHERE code_iso = 'MLT';
|
||||
UPDATE llx_c_country SET numeric_code = '504' WHERE code_iso = 'MAR';
|
||||
UPDATE llx_c_country SET numeric_code = '474' WHERE code_iso = 'MTQ';
|
||||
UPDATE llx_c_country SET numeric_code = '480' WHERE code_iso = 'MUS';
|
||||
UPDATE llx_c_country SET numeric_code = '478' WHERE code_iso = 'MRT';
|
||||
UPDATE llx_c_country SET numeric_code = '175' WHERE code_iso = 'MYT';
|
||||
UPDATE llx_c_country SET numeric_code = '484' WHERE code_iso = 'MEX';
|
||||
UPDATE llx_c_country SET numeric_code = '583' WHERE code_iso = 'FSM';
|
||||
UPDATE llx_c_country SET numeric_code = '498' WHERE code_iso = 'MDA';
|
||||
UPDATE llx_c_country SET numeric_code = '492' WHERE code_iso = 'MCO';
|
||||
UPDATE llx_c_country SET numeric_code = '496' WHERE code_iso = 'MNG';
|
||||
UPDATE llx_c_country SET numeric_code = '499' WHERE code_iso = 'MNE';
|
||||
UPDATE llx_c_country SET numeric_code = '500' WHERE code_iso = 'MSR';
|
||||
UPDATE llx_c_country SET numeric_code = '508' WHERE code_iso = 'MOZ';
|
||||
UPDATE llx_c_country SET numeric_code = '104' WHERE code_iso = 'MMR';
|
||||
UPDATE llx_c_country SET numeric_code = '516' WHERE code_iso = 'NAM';
|
||||
UPDATE llx_c_country SET numeric_code = '520' WHERE code_iso = 'NRU';
|
||||
UPDATE llx_c_country SET numeric_code = '524' WHERE code_iso = 'NPL';
|
||||
UPDATE llx_c_country SET numeric_code = '558' WHERE code_iso = 'NIC';
|
||||
UPDATE llx_c_country SET numeric_code = '562' WHERE code_iso = 'NER';
|
||||
UPDATE llx_c_country SET numeric_code = '566' WHERE code_iso = 'NGA';
|
||||
UPDATE llx_c_country SET numeric_code = '570' WHERE code_iso = 'NIU';
|
||||
UPDATE llx_c_country SET numeric_code = '574' WHERE code_iso = 'NFK';
|
||||
UPDATE llx_c_country SET numeric_code = '578' WHERE code_iso = 'NOR';
|
||||
UPDATE llx_c_country SET numeric_code = '540' WHERE code_iso = 'NCL';
|
||||
UPDATE llx_c_country SET numeric_code = '554' WHERE code_iso = 'NZL';
|
||||
UPDATE llx_c_country SET numeric_code = '512' WHERE code_iso = 'OMN';
|
||||
UPDATE llx_c_country SET numeric_code = '528' WHERE code_iso = 'NLD';
|
||||
UPDATE llx_c_country SET numeric_code = '586' WHERE code_iso = 'PAK';
|
||||
UPDATE llx_c_country SET numeric_code = '585' WHERE code_iso = 'PLW';
|
||||
UPDATE llx_c_country SET numeric_code = '275' WHERE code_iso = 'PSE';
|
||||
UPDATE llx_c_country SET numeric_code = '591' WHERE code_iso = 'PAN';
|
||||
UPDATE llx_c_country SET numeric_code = '598' WHERE code_iso = 'PNG';
|
||||
UPDATE llx_c_country SET numeric_code = '600' WHERE code_iso = 'PRY';
|
||||
UPDATE llx_c_country SET numeric_code = '604' WHERE code_iso = 'PER';
|
||||
UPDATE llx_c_country SET numeric_code = '258' WHERE code_iso = 'PYF';
|
||||
UPDATE llx_c_country SET numeric_code = '616' WHERE code_iso = 'POL';
|
||||
UPDATE llx_c_country SET numeric_code = '620' WHERE code_iso = 'PRT';
|
||||
UPDATE llx_c_country SET numeric_code = '630' WHERE code_iso = 'PRI';
|
||||
UPDATE llx_c_country SET numeric_code = '826' WHERE code_iso = 'GBR';
|
||||
UPDATE llx_c_country SET numeric_code = '732' WHERE code_iso = 'ESH';
|
||||
UPDATE llx_c_country SET numeric_code = '140' WHERE code_iso = 'CAF';
|
||||
UPDATE llx_c_country SET numeric_code = '203' WHERE code_iso = 'CZE';
|
||||
UPDATE llx_c_country SET numeric_code = '178' WHERE code_iso = 'COG';
|
||||
UPDATE llx_c_country SET numeric_code = '180' WHERE code_iso = 'COD';
|
||||
UPDATE llx_c_country SET numeric_code = '214' WHERE code_iso = 'DOM';
|
||||
UPDATE llx_c_country SET numeric_code = '638' WHERE code_iso = 'REU';
|
||||
UPDATE llx_c_country SET numeric_code = '646' WHERE code_iso = 'RWA';
|
||||
UPDATE llx_c_country SET numeric_code = '642' WHERE code_iso = 'ROU';
|
||||
UPDATE llx_c_country SET numeric_code = '643' WHERE code_iso = 'RUS';
|
||||
UPDATE llx_c_country SET numeric_code = '882' WHERE code_iso = 'WSM';
|
||||
UPDATE llx_c_country SET numeric_code = '016' WHERE code_iso = 'ASM';
|
||||
UPDATE llx_c_country SET numeric_code = '652' WHERE code_iso = 'BLM';
|
||||
UPDATE llx_c_country SET numeric_code = '659' WHERE code_iso = 'KNA';
|
||||
UPDATE llx_c_country SET numeric_code = '674' WHERE code_iso = 'SMR';
|
||||
UPDATE llx_c_country SET numeric_code = '663' WHERE code_iso = 'MAF';
|
||||
UPDATE llx_c_country SET numeric_code = '666' WHERE code_iso = 'SPM';
|
||||
UPDATE llx_c_country SET numeric_code = '670' WHERE code_iso = 'VCT';
|
||||
UPDATE llx_c_country SET numeric_code = '654' WHERE code_iso = 'SHN';
|
||||
UPDATE llx_c_country SET numeric_code = '662' WHERE code_iso = 'LCA';
|
||||
UPDATE llx_c_country SET numeric_code = '678' WHERE code_iso = 'STP';
|
||||
UPDATE llx_c_country SET numeric_code = '686' WHERE code_iso = 'SEN';
|
||||
UPDATE llx_c_country SET numeric_code = '688' WHERE code_iso = 'SRB';
|
||||
UPDATE llx_c_country SET numeric_code = '690' WHERE code_iso = 'SYC';
|
||||
UPDATE llx_c_country SET numeric_code = '694' WHERE code_iso = 'SLE';
|
||||
UPDATE llx_c_country SET numeric_code = '702' WHERE code_iso = 'SGP';
|
||||
UPDATE llx_c_country SET numeric_code = '534' WHERE code_iso = 'SXM';
|
||||
UPDATE llx_c_country SET numeric_code = '760' WHERE code_iso = 'SYR';
|
||||
UPDATE llx_c_country SET numeric_code = '706' WHERE code_iso = 'SOM';
|
||||
UPDATE llx_c_country SET numeric_code = '144' WHERE code_iso = 'LKA';
|
||||
UPDATE llx_c_country SET numeric_code = '748' WHERE code_iso = 'SWZ';
|
||||
UPDATE llx_c_country SET numeric_code = '710' WHERE code_iso = 'ZAF';
|
||||
UPDATE llx_c_country SET numeric_code = '729' WHERE code_iso = 'SDN';
|
||||
UPDATE llx_c_country SET numeric_code = '728' WHERE code_iso = 'SSD';
|
||||
UPDATE llx_c_country SET numeric_code = '752' WHERE code_iso = 'SWE';
|
||||
UPDATE llx_c_country SET numeric_code = '756' WHERE code_iso = 'CHE';
|
||||
UPDATE llx_c_country SET numeric_code = '740' WHERE code_iso = 'SUR';
|
||||
UPDATE llx_c_country SET numeric_code = '744' WHERE code_iso = 'SJM';
|
||||
UPDATE llx_c_country SET numeric_code = '764' WHERE code_iso = 'THA';
|
||||
UPDATE llx_c_country SET numeric_code = '158' WHERE code_iso = 'TWN';
|
||||
UPDATE llx_c_country SET numeric_code = '834' WHERE code_iso = 'TZA';
|
||||
UPDATE llx_c_country SET numeric_code = '762' WHERE code_iso = 'TJK';
|
||||
UPDATE llx_c_country SET numeric_code = '086' WHERE code_iso = 'IOT';
|
||||
UPDATE llx_c_country SET numeric_code = '260' WHERE code_iso = 'ATF';
|
||||
UPDATE llx_c_country SET numeric_code = '626' WHERE code_iso = 'TLS';
|
||||
UPDATE llx_c_country SET numeric_code = '768' WHERE code_iso = 'TGO';
|
||||
UPDATE llx_c_country SET numeric_code = '772' WHERE code_iso = 'TKL';
|
||||
UPDATE llx_c_country SET numeric_code = '776' WHERE code_iso = 'TON';
|
||||
UPDATE llx_c_country SET numeric_code = '780' WHERE code_iso = 'TTO';
|
||||
UPDATE llx_c_country SET numeric_code = '788' WHERE code_iso = 'TUN';
|
||||
UPDATE llx_c_country SET numeric_code = '795' WHERE code_iso = 'TKM';
|
||||
UPDATE llx_c_country SET numeric_code = '792' WHERE code_iso = 'TUR';
|
||||
UPDATE llx_c_country SET numeric_code = '798' WHERE code_iso = 'TUV';
|
||||
UPDATE llx_c_country SET numeric_code = '804' WHERE code_iso = 'UKR';
|
||||
UPDATE llx_c_country SET numeric_code = '800' WHERE code_iso = 'UGA';
|
||||
UPDATE llx_c_country SET numeric_code = '858' WHERE code_iso = 'URY';
|
||||
UPDATE llx_c_country SET numeric_code = '860' WHERE code_iso = 'UZB';
|
||||
UPDATE llx_c_country SET numeric_code = '548' WHERE code_iso = 'VUT';
|
||||
UPDATE llx_c_country SET numeric_code = '336' WHERE code_iso = 'VAT';
|
||||
UPDATE llx_c_country SET numeric_code = '862' WHERE code_iso = 'VEN';
|
||||
UPDATE llx_c_country SET numeric_code = '704' WHERE code_iso = 'VNM';
|
||||
UPDATE llx_c_country SET numeric_code = '876' WHERE code_iso = 'WLF';
|
||||
UPDATE llx_c_country SET numeric_code = '887' WHERE code_iso = 'YEM';
|
||||
UPDATE llx_c_country SET numeric_code = '262' WHERE code_iso = 'DJI';
|
||||
UPDATE llx_c_country SET numeric_code = '894' WHERE code_iso = 'ZMB';
|
||||
UPDATE llx_c_country SET numeric_code = '716' WHERE code_iso = 'ZWE';
|
||||
|
||||
|
||||
|
||||
-- Set field eec
|
||||
UPDATE llx_c_country SET eec = 1 WHERE code IN ('AT','BE','BG','CY','CZ','DE','DK','EE','ES','FI','FR','GR','HR','NL','HU','IE','IT','LT','LU','LV','MC','MT','PL','PT','RO','SE','SK','SI');
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -33,8 +33,9 @@
|
||||
|
||||
|
||||
-- Missing in v16 or lower
|
||||
|
||||
ALTER TABLE llx_accounting_account DROP FOREIGN KEY fk_accounting_account_fk_pcg_version;
|
||||
ALTER TABLE llx_accounting_system MODIFY COLUMN pcg_version varchar(32) NOT NULL;
|
||||
ALTER TABLE llx_accounting_account ADD CONSTRAINT fk_accounting_account_fk_pcg_version FOREIGN KEY (fk_pcg_version) REFERENCES llx_accounting_system (pcg_version);
|
||||
|
||||
ALTER TABLE llx_c_action_trigger MODIFY elementtype VARCHAR(64);
|
||||
|
||||
|
||||
@ -100,3 +100,277 @@ ALTER TABLE llx_recruitment_recruitmentcandidature ADD COLUMN fk_user integer;
|
||||
|
||||
ALTER TABLE llx_bordereau_cheque ADD COLUMN type VARCHAR(6) DEFAULT 'CHQ';
|
||||
|
||||
-- Element time
|
||||
ALTER TABLE llx_projet_task_time RENAME TO llx_element_time;
|
||||
ALTER TABLE llx_element_time CHANGE COLUMN fk_task fk_element integer NOT NULL;
|
||||
ALTER TABLE llx_element_time CHANGE COLUMN task_date element_date date;
|
||||
ALTER TABLE llx_element_time CHANGE COLUMN task_datehour element_datehour datetime;
|
||||
ALTER TABLE llx_element_time CHANGE COLUMN task_date_withhour element_date_withhour integer;
|
||||
ALTER TABLE llx_element_time CHANGE COLUMN task_duration element_duration double;
|
||||
ALTER TABLE llx_element_time ADD COLUMN elementtype varchar(32) NOT NULL DEFAULT 'task' AFTER fk_element;
|
||||
|
||||
-- VMYSQL4.1 DROP INDEX idx_projet_task_time_task on llx_element_time;
|
||||
-- VMYSQL4.1 DROP INDEX idx_projet_task_time_date on llx_element_time;
|
||||
-- VMYSQL4.1 DROP INDEX idx_projet_task_time_datehour on llx_element_time;
|
||||
-- VPGSQL8.2 DROP INDEX idx_projet_task_time_task;
|
||||
-- VPGSQL8.2 DROP INDEX idx_projet_task_time_date;
|
||||
-- VPGSQL8.2 DROP INDEX idx_projet_task_time_datehour;
|
||||
|
||||
ALTER TABLE llx_element_time ADD INDEX idx_element_time_task (fk_element);
|
||||
ALTER TABLE llx_element_time ADD INDEX idx_element_time_date (element_date);
|
||||
ALTER TABLE llx_element_time ADD INDEX idx_element_time_datehour (element_datehour);
|
||||
|
||||
|
||||
ALTER TABLE llx_c_country ADD COLUMN numeric_code VARCHAR(3);
|
||||
|
||||
UPDATE llx_c_country SET numeric_code = '004' WHERE code_iso = 'AFG';
|
||||
UPDATE llx_c_country SET numeric_code = '248' WHERE code_iso = 'ALA';
|
||||
UPDATE llx_c_country SET numeric_code = '008' WHERE code_iso = 'ALB';
|
||||
UPDATE llx_c_country SET numeric_code = '276' WHERE code_iso = 'DEU';
|
||||
UPDATE llx_c_country SET numeric_code = '020' WHERE code_iso = 'AND';
|
||||
UPDATE llx_c_country SET numeric_code = '024' WHERE code_iso = 'AGO';
|
||||
UPDATE llx_c_country SET numeric_code = '660' WHERE code_iso = 'AIA';
|
||||
UPDATE llx_c_country SET numeric_code = '010' WHERE code_iso = 'ATA';
|
||||
UPDATE llx_c_country SET numeric_code = '028' WHERE code_iso = 'ATG';
|
||||
UPDATE llx_c_country SET numeric_code = '682' WHERE code_iso = 'SAU';
|
||||
UPDATE llx_c_country SET numeric_code = '012' WHERE code_iso = 'DZA';
|
||||
UPDATE llx_c_country SET numeric_code = '032' WHERE code_iso = 'ARG';
|
||||
UPDATE llx_c_country SET numeric_code = '051' WHERE code_iso = 'ARM';
|
||||
UPDATE llx_c_country SET numeric_code = '533' WHERE code_iso = 'ABW';
|
||||
UPDATE llx_c_country SET numeric_code = '036' WHERE code_iso = 'AUS';
|
||||
UPDATE llx_c_country SET numeric_code = '040' WHERE code_iso = 'AUT';
|
||||
UPDATE llx_c_country SET numeric_code = '031' WHERE code_iso = 'AZE';
|
||||
UPDATE llx_c_country SET numeric_code = '044' WHERE code_iso = 'BHS';
|
||||
UPDATE llx_c_country SET numeric_code = '050' WHERE code_iso = 'BGD';
|
||||
UPDATE llx_c_country SET numeric_code = '052' WHERE code_iso = 'BRB';
|
||||
UPDATE llx_c_country SET numeric_code = '048' WHERE code_iso = 'BHR';
|
||||
UPDATE llx_c_country SET numeric_code = '056' WHERE code_iso = 'BEL';
|
||||
UPDATE llx_c_country SET numeric_code = '084' WHERE code_iso = 'BLZ';
|
||||
UPDATE llx_c_country SET numeric_code = '204' WHERE code_iso = 'BEN';
|
||||
UPDATE llx_c_country SET numeric_code = '060' WHERE code_iso = 'BMU';
|
||||
UPDATE llx_c_country SET numeric_code = '112' WHERE code_iso = 'BLR';
|
||||
UPDATE llx_c_country SET numeric_code = '068' WHERE code_iso = 'BOL';
|
||||
UPDATE llx_c_country SET numeric_code = '535' WHERE code_iso = 'BES';
|
||||
UPDATE llx_c_country SET numeric_code = '070' WHERE code_iso = 'BIH';
|
||||
UPDATE llx_c_country SET numeric_code = '072' WHERE code_iso = 'BWA';
|
||||
UPDATE llx_c_country SET numeric_code = '076' WHERE code_iso = 'BRA';
|
||||
UPDATE llx_c_country SET numeric_code = '096' WHERE code_iso = 'BRN';
|
||||
UPDATE llx_c_country SET numeric_code = '100' WHERE code_iso = 'BGR';
|
||||
UPDATE llx_c_country SET numeric_code = '854' WHERE code_iso = 'BFA';
|
||||
UPDATE llx_c_country SET numeric_code = '108' WHERE code_iso = 'BDI';
|
||||
UPDATE llx_c_country SET numeric_code = '064' WHERE code_iso = 'BTN';
|
||||
UPDATE llx_c_country SET numeric_code = '132' WHERE code_iso = 'CPV';
|
||||
UPDATE llx_c_country SET numeric_code = '116' WHERE code_iso = 'KHM';
|
||||
UPDATE llx_c_country SET numeric_code = '120' WHERE code_iso = 'CMR';
|
||||
UPDATE llx_c_country SET numeric_code = '124' WHERE code_iso = 'CAN';
|
||||
UPDATE llx_c_country SET numeric_code = '634' WHERE code_iso = 'QAT';
|
||||
UPDATE llx_c_country SET numeric_code = '148' WHERE code_iso = 'TCD';
|
||||
UPDATE llx_c_country SET numeric_code = '152' WHERE code_iso = 'CHL';
|
||||
UPDATE llx_c_country SET numeric_code = '156' WHERE code_iso = 'CHN';
|
||||
UPDATE llx_c_country SET numeric_code = '196' WHERE code_iso = 'CYP';
|
||||
UPDATE llx_c_country SET numeric_code = '170' WHERE code_iso = 'COL';
|
||||
UPDATE llx_c_country SET numeric_code = '174' WHERE code_iso = 'COM';
|
||||
UPDATE llx_c_country SET numeric_code = '408' WHERE code_iso = 'PRK';
|
||||
UPDATE llx_c_country SET numeric_code = '410' WHERE code_iso = 'KOR';
|
||||
UPDATE llx_c_country SET numeric_code = '384' WHERE code_iso = 'CIV';
|
||||
UPDATE llx_c_country SET numeric_code = '188' WHERE code_iso = 'CRI';
|
||||
UPDATE llx_c_country SET numeric_code = '191' WHERE code_iso = 'HRV';
|
||||
UPDATE llx_c_country SET numeric_code = '192' WHERE code_iso = 'CUB';
|
||||
UPDATE llx_c_country SET numeric_code = '531' WHERE code_iso = 'CUW';
|
||||
UPDATE llx_c_country SET numeric_code = '208' WHERE code_iso = 'DNK';
|
||||
UPDATE llx_c_country SET numeric_code = '212' WHERE code_iso = 'DMA';
|
||||
UPDATE llx_c_country SET numeric_code = '218' WHERE code_iso = 'ECU';
|
||||
UPDATE llx_c_country SET numeric_code = '818' WHERE code_iso = 'EGY';
|
||||
UPDATE llx_c_country SET numeric_code = '222' WHERE code_iso = 'SLV';
|
||||
UPDATE llx_c_country SET numeric_code = '784' WHERE code_iso = 'ARE';
|
||||
UPDATE llx_c_country SET numeric_code = '232' WHERE code_iso = 'ERI';
|
||||
UPDATE llx_c_country SET numeric_code = '703' WHERE code_iso = 'SVK';
|
||||
UPDATE llx_c_country SET numeric_code = '705' WHERE code_iso = 'SVN';
|
||||
UPDATE llx_c_country SET numeric_code = '724' WHERE code_iso = 'ESP';
|
||||
UPDATE llx_c_country SET numeric_code = '840' WHERE code_iso = 'USA';
|
||||
UPDATE llx_c_country SET numeric_code = '233' WHERE code_iso = 'EST';
|
||||
UPDATE llx_c_country SET numeric_code = '231' WHERE code_iso = 'ETH';
|
||||
UPDATE llx_c_country SET numeric_code = '608' WHERE code_iso = 'PHL';
|
||||
UPDATE llx_c_country SET numeric_code = '246' WHERE code_iso = 'FIN';
|
||||
UPDATE llx_c_country SET numeric_code = '242' WHERE code_iso = 'FJI';
|
||||
UPDATE llx_c_country SET numeric_code = '250' WHERE code_iso = 'FRA';
|
||||
UPDATE llx_c_country SET numeric_code = '266' WHERE code_iso = 'GAB';
|
||||
UPDATE llx_c_country SET numeric_code = '270' WHERE code_iso = 'GMB';
|
||||
UPDATE llx_c_country SET numeric_code = '268' WHERE code_iso = 'GEO';
|
||||
UPDATE llx_c_country SET numeric_code = '288' WHERE code_iso = 'GHA';
|
||||
UPDATE llx_c_country SET numeric_code = '292' WHERE code_iso = 'GIB';
|
||||
UPDATE llx_c_country SET numeric_code = '308' WHERE code_iso = 'GRD';
|
||||
UPDATE llx_c_country SET numeric_code = '300' WHERE code_iso = 'GRC';
|
||||
UPDATE llx_c_country SET numeric_code = '304' WHERE code_iso = 'GRL';
|
||||
UPDATE llx_c_country SET numeric_code = '312' WHERE code_iso = 'GLP';
|
||||
UPDATE llx_c_country SET numeric_code = '316' WHERE code_iso = 'GUM';
|
||||
UPDATE llx_c_country SET numeric_code = '320' WHERE code_iso = 'GTM';
|
||||
UPDATE llx_c_country SET numeric_code = '254' WHERE code_iso = 'GUF';
|
||||
UPDATE llx_c_country SET numeric_code = '831' WHERE code_iso = 'GGY';
|
||||
UPDATE llx_c_country SET numeric_code = '324' WHERE code_iso = 'GIN';
|
||||
UPDATE llx_c_country SET numeric_code = '624' WHERE code_iso = 'GNB';
|
||||
UPDATE llx_c_country SET numeric_code = '226' WHERE code_iso = 'GNQ';
|
||||
UPDATE llx_c_country SET numeric_code = '328' WHERE code_iso = 'GUY';
|
||||
UPDATE llx_c_country SET numeric_code = '332' WHERE code_iso = 'HTI';
|
||||
UPDATE llx_c_country SET numeric_code = '340' WHERE code_iso = 'HND';
|
||||
UPDATE llx_c_country SET numeric_code = '344' WHERE code_iso = 'HKG';
|
||||
UPDATE llx_c_country SET numeric_code = '348' WHERE code_iso = 'HUN';
|
||||
UPDATE llx_c_country SET numeric_code = '356' WHERE code_iso = 'IND';
|
||||
UPDATE llx_c_country SET numeric_code = '360' WHERE code_iso = 'IDN';
|
||||
UPDATE llx_c_country SET numeric_code = '368' WHERE code_iso = 'IRQ';
|
||||
UPDATE llx_c_country SET numeric_code = '364' WHERE code_iso = 'IRN';
|
||||
UPDATE llx_c_country SET numeric_code = '372' WHERE code_iso = 'IRL';
|
||||
UPDATE llx_c_country SET numeric_code = '074' WHERE code_iso = 'BVT';
|
||||
UPDATE llx_c_country SET numeric_code = '833' WHERE code_iso = 'IMN';
|
||||
UPDATE llx_c_country SET numeric_code = '162' WHERE code_iso = 'CXR';
|
||||
UPDATE llx_c_country SET numeric_code = '352' WHERE code_iso = 'ISL';
|
||||
UPDATE llx_c_country SET numeric_code = '136' WHERE code_iso = 'CYM';
|
||||
UPDATE llx_c_country SET numeric_code = '166' WHERE code_iso = 'CCK';
|
||||
UPDATE llx_c_country SET numeric_code = '184' WHERE code_iso = 'COK';
|
||||
UPDATE llx_c_country SET numeric_code = '234' WHERE code_iso = 'FRO';
|
||||
UPDATE llx_c_country SET numeric_code = '239' WHERE code_iso = 'SGS';
|
||||
UPDATE llx_c_country SET numeric_code = '334' WHERE code_iso = 'HMD';
|
||||
UPDATE llx_c_country SET numeric_code = '238' WHERE code_iso = 'FLK';
|
||||
UPDATE llx_c_country SET numeric_code = '580' WHERE code_iso = 'MNP';
|
||||
UPDATE llx_c_country SET numeric_code = '584' WHERE code_iso = 'MHL';
|
||||
UPDATE llx_c_country SET numeric_code = '612' WHERE code_iso = 'PCN';
|
||||
UPDATE llx_c_country SET numeric_code = '090' WHERE code_iso = 'SLB';
|
||||
UPDATE llx_c_country SET numeric_code = '796' WHERE code_iso = 'TCA';
|
||||
UPDATE llx_c_country SET numeric_code = '581' WHERE code_iso = 'UMI';
|
||||
UPDATE llx_c_country SET numeric_code = '092' WHERE code_iso = 'VGB';
|
||||
UPDATE llx_c_country SET numeric_code = '850' WHERE code_iso = 'VIR';
|
||||
UPDATE llx_c_country SET numeric_code = '376' WHERE code_iso = 'ISR';
|
||||
UPDATE llx_c_country SET numeric_code = '380' WHERE code_iso = 'ITA';
|
||||
UPDATE llx_c_country SET numeric_code = '388' WHERE code_iso = 'JAM';
|
||||
UPDATE llx_c_country SET numeric_code = '392' WHERE code_iso = 'JPN';
|
||||
UPDATE llx_c_country SET numeric_code = '832' WHERE code_iso = 'JEY';
|
||||
UPDATE llx_c_country SET numeric_code = '400' WHERE code_iso = 'JOR';
|
||||
UPDATE llx_c_country SET numeric_code = '398' WHERE code_iso = 'KAZ';
|
||||
UPDATE llx_c_country SET numeric_code = '404' WHERE code_iso = 'KEN';
|
||||
UPDATE llx_c_country SET numeric_code = '417' WHERE code_iso = 'KGZ';
|
||||
UPDATE llx_c_country SET numeric_code = '296' WHERE code_iso = 'KIR';
|
||||
UPDATE llx_c_country SET numeric_code = '414' WHERE code_iso = 'KWT';
|
||||
UPDATE llx_c_country SET numeric_code = '418' WHERE code_iso = 'LAO';
|
||||
UPDATE llx_c_country SET numeric_code = '426' WHERE code_iso = 'LSO';
|
||||
UPDATE llx_c_country SET numeric_code = '428' WHERE code_iso = 'LVA';
|
||||
UPDATE llx_c_country SET numeric_code = '422' WHERE code_iso = 'LBN';
|
||||
UPDATE llx_c_country SET numeric_code = '430' WHERE code_iso = 'LBR';
|
||||
UPDATE llx_c_country SET numeric_code = '434' WHERE code_iso = 'LBY';
|
||||
UPDATE llx_c_country SET numeric_code = '438' WHERE code_iso = 'LIE';
|
||||
UPDATE llx_c_country SET numeric_code = '440' WHERE code_iso = 'LTU';
|
||||
UPDATE llx_c_country SET numeric_code = '442' WHERE code_iso = 'LUX';
|
||||
UPDATE llx_c_country SET numeric_code = '446' WHERE code_iso = 'MAC';
|
||||
UPDATE llx_c_country SET numeric_code = '807' WHERE code_iso = 'MKD';
|
||||
UPDATE llx_c_country SET numeric_code = '450' WHERE code_iso = 'MDG';
|
||||
UPDATE llx_c_country SET numeric_code = '458' WHERE code_iso = 'MYS';
|
||||
UPDATE llx_c_country SET numeric_code = '454' WHERE code_iso = 'MWI';
|
||||
UPDATE llx_c_country SET numeric_code = '462' WHERE code_iso = 'MDV';
|
||||
UPDATE llx_c_country SET numeric_code = '466' WHERE code_iso = 'MLI';
|
||||
UPDATE llx_c_country SET numeric_code = '470' WHERE code_iso = 'MLT';
|
||||
UPDATE llx_c_country SET numeric_code = '504' WHERE code_iso = 'MAR';
|
||||
UPDATE llx_c_country SET numeric_code = '474' WHERE code_iso = 'MTQ';
|
||||
UPDATE llx_c_country SET numeric_code = '480' WHERE code_iso = 'MUS';
|
||||
UPDATE llx_c_country SET numeric_code = '478' WHERE code_iso = 'MRT';
|
||||
UPDATE llx_c_country SET numeric_code = '175' WHERE code_iso = 'MYT';
|
||||
UPDATE llx_c_country SET numeric_code = '484' WHERE code_iso = 'MEX';
|
||||
UPDATE llx_c_country SET numeric_code = '583' WHERE code_iso = 'FSM';
|
||||
UPDATE llx_c_country SET numeric_code = '498' WHERE code_iso = 'MDA';
|
||||
UPDATE llx_c_country SET numeric_code = '492' WHERE code_iso = 'MCO';
|
||||
UPDATE llx_c_country SET numeric_code = '496' WHERE code_iso = 'MNG';
|
||||
UPDATE llx_c_country SET numeric_code = '499' WHERE code_iso = 'MNE';
|
||||
UPDATE llx_c_country SET numeric_code = '500' WHERE code_iso = 'MSR';
|
||||
UPDATE llx_c_country SET numeric_code = '508' WHERE code_iso = 'MOZ';
|
||||
UPDATE llx_c_country SET numeric_code = '104' WHERE code_iso = 'MMR';
|
||||
UPDATE llx_c_country SET numeric_code = '516' WHERE code_iso = 'NAM';
|
||||
UPDATE llx_c_country SET numeric_code = '520' WHERE code_iso = 'NRU';
|
||||
UPDATE llx_c_country SET numeric_code = '524' WHERE code_iso = 'NPL';
|
||||
UPDATE llx_c_country SET numeric_code = '558' WHERE code_iso = 'NIC';
|
||||
UPDATE llx_c_country SET numeric_code = '562' WHERE code_iso = 'NER';
|
||||
UPDATE llx_c_country SET numeric_code = '566' WHERE code_iso = 'NGA';
|
||||
UPDATE llx_c_country SET numeric_code = '570' WHERE code_iso = 'NIU';
|
||||
UPDATE llx_c_country SET numeric_code = '574' WHERE code_iso = 'NFK';
|
||||
UPDATE llx_c_country SET numeric_code = '578' WHERE code_iso = 'NOR';
|
||||
UPDATE llx_c_country SET numeric_code = '540' WHERE code_iso = 'NCL';
|
||||
UPDATE llx_c_country SET numeric_code = '554' WHERE code_iso = 'NZL';
|
||||
UPDATE llx_c_country SET numeric_code = '512' WHERE code_iso = 'OMN';
|
||||
UPDATE llx_c_country SET numeric_code = '528' WHERE code_iso = 'NLD';
|
||||
UPDATE llx_c_country SET numeric_code = '586' WHERE code_iso = 'PAK';
|
||||
UPDATE llx_c_country SET numeric_code = '585' WHERE code_iso = 'PLW';
|
||||
UPDATE llx_c_country SET numeric_code = '275' WHERE code_iso = 'PSE';
|
||||
UPDATE llx_c_country SET numeric_code = '591' WHERE code_iso = 'PAN';
|
||||
UPDATE llx_c_country SET numeric_code = '598' WHERE code_iso = 'PNG';
|
||||
UPDATE llx_c_country SET numeric_code = '600' WHERE code_iso = 'PRY';
|
||||
UPDATE llx_c_country SET numeric_code = '604' WHERE code_iso = 'PER';
|
||||
UPDATE llx_c_country SET numeric_code = '258' WHERE code_iso = 'PYF';
|
||||
UPDATE llx_c_country SET numeric_code = '616' WHERE code_iso = 'POL';
|
||||
UPDATE llx_c_country SET numeric_code = '620' WHERE code_iso = 'PRT';
|
||||
UPDATE llx_c_country SET numeric_code = '630' WHERE code_iso = 'PRI';
|
||||
UPDATE llx_c_country SET numeric_code = '826' WHERE code_iso = 'GBR';
|
||||
UPDATE llx_c_country SET numeric_code = '732' WHERE code_iso = 'ESH';
|
||||
UPDATE llx_c_country SET numeric_code = '140' WHERE code_iso = 'CAF';
|
||||
UPDATE llx_c_country SET numeric_code = '203' WHERE code_iso = 'CZE';
|
||||
UPDATE llx_c_country SET numeric_code = '178' WHERE code_iso = 'COG';
|
||||
UPDATE llx_c_country SET numeric_code = '180' WHERE code_iso = 'COD';
|
||||
UPDATE llx_c_country SET numeric_code = '214' WHERE code_iso = 'DOM';
|
||||
UPDATE llx_c_country SET numeric_code = '638' WHERE code_iso = 'REU';
|
||||
UPDATE llx_c_country SET numeric_code = '646' WHERE code_iso = 'RWA';
|
||||
UPDATE llx_c_country SET numeric_code = '642' WHERE code_iso = 'ROU';
|
||||
UPDATE llx_c_country SET numeric_code = '643' WHERE code_iso = 'RUS';
|
||||
UPDATE llx_c_country SET numeric_code = '882' WHERE code_iso = 'WSM';
|
||||
UPDATE llx_c_country SET numeric_code = '016' WHERE code_iso = 'ASM';
|
||||
UPDATE llx_c_country SET numeric_code = '652' WHERE code_iso = 'BLM';
|
||||
UPDATE llx_c_country SET numeric_code = '659' WHERE code_iso = 'KNA';
|
||||
UPDATE llx_c_country SET numeric_code = '674' WHERE code_iso = 'SMR';
|
||||
UPDATE llx_c_country SET numeric_code = '663' WHERE code_iso = 'MAF';
|
||||
UPDATE llx_c_country SET numeric_code = '666' WHERE code_iso = 'SPM';
|
||||
UPDATE llx_c_country SET numeric_code = '670' WHERE code_iso = 'VCT';
|
||||
UPDATE llx_c_country SET numeric_code = '654' WHERE code_iso = 'SHN';
|
||||
UPDATE llx_c_country SET numeric_code = '662' WHERE code_iso = 'LCA';
|
||||
UPDATE llx_c_country SET numeric_code = '678' WHERE code_iso = 'STP';
|
||||
UPDATE llx_c_country SET numeric_code = '686' WHERE code_iso = 'SEN';
|
||||
UPDATE llx_c_country SET numeric_code = '688' WHERE code_iso = 'SRB';
|
||||
UPDATE llx_c_country SET numeric_code = '690' WHERE code_iso = 'SYC';
|
||||
UPDATE llx_c_country SET numeric_code = '694' WHERE code_iso = 'SLE';
|
||||
UPDATE llx_c_country SET numeric_code = '702' WHERE code_iso = 'SGP';
|
||||
UPDATE llx_c_country SET numeric_code = '534' WHERE code_iso = 'SXM';
|
||||
UPDATE llx_c_country SET numeric_code = '760' WHERE code_iso = 'SYR';
|
||||
UPDATE llx_c_country SET numeric_code = '706' WHERE code_iso = 'SOM';
|
||||
UPDATE llx_c_country SET numeric_code = '144' WHERE code_iso = 'LKA';
|
||||
UPDATE llx_c_country SET numeric_code = '748' WHERE code_iso = 'SWZ';
|
||||
UPDATE llx_c_country SET numeric_code = '710' WHERE code_iso = 'ZAF';
|
||||
UPDATE llx_c_country SET numeric_code = '729' WHERE code_iso = 'SDN';
|
||||
UPDATE llx_c_country SET numeric_code = '728' WHERE code_iso = 'SSD';
|
||||
UPDATE llx_c_country SET numeric_code = '752' WHERE code_iso = 'SWE';
|
||||
UPDATE llx_c_country SET numeric_code = '756' WHERE code_iso = 'CHE';
|
||||
UPDATE llx_c_country SET numeric_code = '740' WHERE code_iso = 'SUR';
|
||||
UPDATE llx_c_country SET numeric_code = '744' WHERE code_iso = 'SJM';
|
||||
UPDATE llx_c_country SET numeric_code = '764' WHERE code_iso = 'THA';
|
||||
UPDATE llx_c_country SET numeric_code = '158' WHERE code_iso = 'TWN';
|
||||
UPDATE llx_c_country SET numeric_code = '834' WHERE code_iso = 'TZA';
|
||||
UPDATE llx_c_country SET numeric_code = '762' WHERE code_iso = 'TJK';
|
||||
UPDATE llx_c_country SET numeric_code = '086' WHERE code_iso = 'IOT';
|
||||
UPDATE llx_c_country SET numeric_code = '260' WHERE code_iso = 'ATF';
|
||||
UPDATE llx_c_country SET numeric_code = '626' WHERE code_iso = 'TLS';
|
||||
UPDATE llx_c_country SET numeric_code = '768' WHERE code_iso = 'TGO';
|
||||
UPDATE llx_c_country SET numeric_code = '772' WHERE code_iso = 'TKL';
|
||||
UPDATE llx_c_country SET numeric_code = '776' WHERE code_iso = 'TON';
|
||||
UPDATE llx_c_country SET numeric_code = '780' WHERE code_iso = 'TTO';
|
||||
UPDATE llx_c_country SET numeric_code = '788' WHERE code_iso = 'TUN';
|
||||
UPDATE llx_c_country SET numeric_code = '795' WHERE code_iso = 'TKM';
|
||||
UPDATE llx_c_country SET numeric_code = '792' WHERE code_iso = 'TUR';
|
||||
UPDATE llx_c_country SET numeric_code = '798' WHERE code_iso = 'TUV';
|
||||
UPDATE llx_c_country SET numeric_code = '804' WHERE code_iso = 'UKR';
|
||||
UPDATE llx_c_country SET numeric_code = '800' WHERE code_iso = 'UGA';
|
||||
UPDATE llx_c_country SET numeric_code = '858' WHERE code_iso = 'URY';
|
||||
UPDATE llx_c_country SET numeric_code = '860' WHERE code_iso = 'UZB';
|
||||
UPDATE llx_c_country SET numeric_code = '548' WHERE code_iso = 'VUT';
|
||||
UPDATE llx_c_country SET numeric_code = '336' WHERE code_iso = 'VAT';
|
||||
UPDATE llx_c_country SET numeric_code = '862' WHERE code_iso = 'VEN';
|
||||
UPDATE llx_c_country SET numeric_code = '704' WHERE code_iso = 'VNM';
|
||||
UPDATE llx_c_country SET numeric_code = '876' WHERE code_iso = 'WLF';
|
||||
UPDATE llx_c_country SET numeric_code = '887' WHERE code_iso = 'YEM';
|
||||
UPDATE llx_c_country SET numeric_code = '262' WHERE code_iso = 'DJI';
|
||||
UPDATE llx_c_country SET numeric_code = '894' WHERE code_iso = 'ZMB';
|
||||
UPDATE llx_c_country SET numeric_code = '716' WHERE code_iso = 'ZWE';
|
||||
|
||||
|
||||
|
||||
@ -315,7 +315,7 @@ UPDATE llx_actioncomm set fk_user_action = fk_user_done where fk_user_done > 0 a
|
||||
UPDATE llx_actioncomm set fk_user_action = fk_user_author where fk_user_author > 0 and (fk_user_action is null or fk_user_action = 0);
|
||||
|
||||
|
||||
UPDATE llx_projet_task_time set task_datehour = task_date where task_datehour IS NULL and task_date IS NOT NULL;
|
||||
UPDATE llx_element_time set element_datehour = element_date where element_datehour IS NULL and element_date IS NOT NULL;
|
||||
|
||||
UPDATE llx_projet set fk_opp_status = NULL where fk_opp_status = -1;
|
||||
UPDATE llx_projet set fk_opp_status = (SELECT rowid FROM llx_c_lead_status WHERE code='PROSP') where fk_opp_status IS NULL and opp_amount > 0;
|
||||
@ -389,8 +389,8 @@ update llx_expedition set date_valid = date_creation where fk_statut = 1 and dat
|
||||
update llx_expedition set date_valid = NOW() where fk_statut = 1 and date_valid IS NULL;
|
||||
|
||||
-- Detect bad consistency between duraction_effective of a task and sum of time of tasks
|
||||
-- select pt.rowid, pt.duration_effective, SUM(ptt.task_duration) as y from llx_projet_task as pt, llx_projet_task_time as ptt where ptt.fk_task = pt.rowid group by pt.rowid, pt.duration_effective having pt.duration_effective <> y;
|
||||
update llx_projet_task as pt set pt.duration_effective = (select SUM(ptt.task_duration) as y from llx_projet_task_time as ptt where ptt.fk_task = pt.rowid) where pt.duration_effective <> (select SUM(ptt.task_duration) as y from llx_projet_task_time as ptt where ptt.fk_task = pt.rowid);
|
||||
-- select pt.rowid, pt.duration_effective, SUM(ptt.element_duration) as y from llx_projet_task as pt, llx_element_time as ptt where ptt.fk_element = pt.rowid and ptt.elementtype = 'task' group by pt.rowid, pt.duration_effective having pt.duration_effective <> y;
|
||||
update llx_projet_task as pt set pt.duration_effective = (select SUM(ptt.element_duration) as y from llx_element_time as ptt where ptt.fk_element = pt.rowid and ptt.elementtype = 'task') where pt.duration_effective <> (select SUM(ptt.element_duration) as y from llx_element_time as ptt where ptt.fk_element = pt.rowid and ptt.elementtype = 'task');
|
||||
|
||||
|
||||
-- Remove duplicate of shipment mode (keep the one with tracking defined)
|
||||
@ -422,7 +422,7 @@ UPDATE llx_facture_fourn_det SET fk_code_ventilation = 0 WHERE fk_code_ventilati
|
||||
UPDATE llx_expensereport_det SET fk_code_ventilation = 0 WHERE fk_code_ventilation > 0 AND fk_code_ventilation NOT IN (select rowid FROM llx_accounting_account);
|
||||
|
||||
|
||||
-- VMYSQL4.1 update llx_projet_task_time set task_datehour = task_date where task_datehour < task_date or task_datehour > DATE_ADD(task_date, interval 1 day);
|
||||
-- VMYSQL4.1 update llx_element_time set element_datehour = element_date where element_datehour < element_date or element_datehour > DATE_ADD(element_date, interval 1 day);
|
||||
|
||||
|
||||
-- Clean product prices
|
||||
@ -487,7 +487,7 @@ UPDATE llx_chargesociales SET date_creation = tms WHERE date_creation IS NULL;
|
||||
|
||||
|
||||
-- Backport a change of value into the hourly rate.
|
||||
-- update llx_projet_task_time as ptt set ptt.thm = (SELECT thm from llx_user as u where ptt.fk_user = u.rowid) where (ptt.thm is null)
|
||||
-- update llx_element_time as ptt set ptt.thm = (SELECT thm from llx_user as u where ptt.fk_user = u.rowid) where (ptt.thm is null)
|
||||
|
||||
|
||||
-- select * from llx_facturedet as fd, llx_product as p where fd.fk_product = p.rowid AND fd.product_type != p.fk_product_type;
|
||||
|
||||
@ -21,11 +21,14 @@
|
||||
|
||||
create table llx_c_country
|
||||
(
|
||||
rowid integer PRIMARY KEY,
|
||||
code varchar(2) NOT NULL,
|
||||
code_iso varchar(3) ,
|
||||
label varchar(128) NOT NULL,
|
||||
eec tinyint DEFAULT 0 NOT NULL,
|
||||
active tinyint DEFAULT 1 NOT NULL,
|
||||
favorite tinyint DEFAULT 0 NOT NULL
|
||||
rowid integer PRIMARY KEY,
|
||||
code varchar(2) NOT NULL, -- the iso 2 alpha code
|
||||
code_iso varchar(3), -- the iso 3 alpha code
|
||||
numeric_code varchar(3), -- the iso numeric number
|
||||
label varchar(128) NOT NULL,
|
||||
eec tinyint DEFAULT 0 NOT NULL,
|
||||
active tinyint DEFAULT 1 NOT NULL,
|
||||
favorite tinyint DEFAULT 0 NOT NULL
|
||||
)ENGINE=innodb;
|
||||
|
||||
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
-- ===========================================================================
|
||||
-- Copyright (C) 2014 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
-- Copyright (C) 2023 Gauthier VERDOL <gauthier.verdol@atm-consulting.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
|
||||
@ -16,7 +17,7 @@
|
||||
--
|
||||
-- ===========================================================================
|
||||
|
||||
ALTER TABLE llx_projet_task_time ADD INDEX idx_projet_task_time_task (fk_task);
|
||||
ALTER TABLE llx_projet_task_time ADD INDEX idx_projet_task_time_date (task_date);
|
||||
ALTER TABLE llx_projet_task_time ADD INDEX idx_projet_task_time_datehour (task_datehour);
|
||||
ALTER TABLE llx_element_time ADD INDEX idx_element_time_task (fk_element);
|
||||
ALTER TABLE llx_element_time ADD INDEX idx_element_time_date (element_date);
|
||||
ALTER TABLE llx_element_time ADD INDEX idx_element_time_datehour (element_datehour);
|
||||
|
||||
38
htdocs/install/mysql/tables/llx_element_time.sql
Normal file
38
htdocs/install/mysql/tables/llx_element_time.sql
Normal file
@ -0,0 +1,38 @@
|
||||
-- Copyright (C) 2023 Gauthier VERDOL <gauthier.verdol@atm-consulting.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
|
||||
-- the Free Software Foundation, either version 3 of the License, or
|
||||
-- (at your option) any later version.
|
||||
--
|
||||
-- This program is distributed in the hope that it will be useful,
|
||||
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
-- GNU General Public License for more details.
|
||||
--
|
||||
-- You should have received a copy of the GNU General Public License
|
||||
-- along with this program. If not, see https://www.gnu.org/licenses/.
|
||||
|
||||
|
||||
CREATE TABLE llx_element_time(
|
||||
-- BEGIN MODULEBUILDER FIELDS
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY NOT NULL,
|
||||
fk_element integer NOT NULL,
|
||||
elementtype varchar(32) NOT NULL,
|
||||
element_date date,
|
||||
element_datehour datetime,
|
||||
element_date_withhour integer,
|
||||
element_duration double,
|
||||
fk_product integer,
|
||||
fk_user integer,
|
||||
thm double(24,8),
|
||||
invoice_id integer DEFAULT NULL,
|
||||
invoice_line_id integer DEFAULT NULL,
|
||||
intervention_id integer DEFAULT NULL,
|
||||
intervention_line_id integer DEFAULT NULL,
|
||||
import_key varchar(14),
|
||||
datec datetime,
|
||||
tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
note text
|
||||
-- END MODULEBUILDER FIELDS
|
||||
) ENGINE=innodb;
|
||||
@ -1,38 +0,0 @@
|
||||
-- ===========================================================================
|
||||
-- Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
--
|
||||
-- This program is free software; you can redistribute it and/or modify
|
||||
-- it under the terms of the GNU General Public License as published by
|
||||
-- the Free Software Foundation; either version 3 of the License, or
|
||||
-- (at your option) any later version.
|
||||
--
|
||||
-- This program is distributed in the hope that it will be useful,
|
||||
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
-- GNU General Public License for more details.
|
||||
--
|
||||
-- You should have received a copy of the GNU General Public License
|
||||
-- along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
--
|
||||
-- ===========================================================================
|
||||
|
||||
create table llx_projet_task_time
|
||||
(
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
fk_task integer NOT NULL,
|
||||
task_date date, -- only the day
|
||||
task_datehour datetime, -- day + hour
|
||||
task_date_withhour integer DEFAULT 0, -- 0 by default, 1 if date was entered with start hour
|
||||
task_duration double,
|
||||
fk_product integer NULL,
|
||||
fk_user integer,
|
||||
thm double(24,8),
|
||||
invoice_id integer DEFAULT NULL, -- If we need to invoice each line of timespent, we can save invoice id here
|
||||
invoice_line_id integer DEFAULT NULL, -- If we need to invoice each line of timespent, we can save invoice line id here
|
||||
intervention_id integer DEFAULT NULL, -- If we need to have an intervention line for each line of timespent, we can save intervention id here
|
||||
intervention_line_id integer DEFAULT NULL, -- If we need to have an intervention line of timespent line, we can save intervention line id here
|
||||
import_key varchar(14), -- Import key
|
||||
datec datetime, -- date creation time
|
||||
tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- last modification date
|
||||
note text -- A comment
|
||||
)ENGINE=innodb;
|
||||
@ -1,6 +1,7 @@
|
||||
-- ============================================================================
|
||||
-- Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be>
|
||||
-- Copyright (C) 2010 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
-- Copyright (C) 2023 Gauthier VERDOL <gauthier.verdol@atm-consulting.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
|
||||
@ -150,7 +151,7 @@ CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_projet FOR EACH ROW
|
||||
CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_projet_extrafields FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms();
|
||||
CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_projet_task FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms();
|
||||
CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_projet_task_extrafields FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms();
|
||||
CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_projet_task_time FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms();
|
||||
CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_element_time FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms();
|
||||
CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_propal FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms();
|
||||
CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_propal_extrafields FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms();
|
||||
CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON llx_propal_merge_pdf_product FOR EACH ROW EXECUTE PROCEDURE update_modified_column_tms();
|
||||
|
||||
@ -4,6 +4,7 @@
|
||||
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2015 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
|
||||
* Copyright (C) 2021 Frédéric France <frederic.france@free.fr>
|
||||
* Copyright (C) 2023 Gauthier VERDOL <gauthier.verdol@atm-consulting.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
|
||||
@ -1030,7 +1031,7 @@ if ($ok && GETPOST('set_empty_time_spent_amount', 'alpha')) {
|
||||
print '<tr><td colspan="2"><br>*** Set value of time spent without amount</td></tr>';
|
||||
|
||||
$sql = "SELECT COUNT(ptt.rowid) as nb, u.rowid as user_id, u.login, u.thm as user_thm";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."projet_task_time as ptt, ".MAIN_DB_PREFIX."user as u";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."element_time as ptt, ".MAIN_DB_PREFIX."user as u";
|
||||
$sql .= " WHERE ptt.fk_user = u.rowid";
|
||||
$sql .= " AND ptt.thm IS NULL and u.thm > 0";
|
||||
$sql .= " GROUP BY u.rowid, u.login, u.thm";
|
||||
@ -1048,7 +1049,7 @@ if ($ok && GETPOST('set_empty_time_spent_amount', 'alpha')) {
|
||||
$db->begin();
|
||||
|
||||
if (GETPOST('set_empty_time_spent_amount') == 'confirmed') {
|
||||
$sql2 = "UPDATE ".MAIN_DB_PREFIX."projet_task_time";
|
||||
$sql2 = "UPDATE ".MAIN_DB_PREFIX."element_time";
|
||||
$sql2 .= " SET thm = ".$obj->user_thm." WHERE thm IS NULL AND fk_user = ".((int) $obj->user_id);
|
||||
$resql2 = $db->query($sql2);
|
||||
if (!$resql2) {
|
||||
|
||||
@ -4,6 +4,7 @@
|
||||
* Copyright (C) 2005-2011 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2010 Juanjo Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2015-2016 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
|
||||
* Copyright (C) 2023 Gauthier VERDOL <gauthier.verdol@atm-consulting.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
|
||||
@ -339,7 +340,7 @@ if (!GETPOST('action', 'aZ09') || preg_match('/upgrade/i', GETPOST('action', 'aZ
|
||||
$afterversionarray = explode('.', '2.8.9');
|
||||
$beforeversionarray = explode('.', '2.9.9');
|
||||
if (versioncompare($versiontoarray, $afterversionarray) >= 0 && versioncompare($versiontoarray, $beforeversionarray) <= 0) {
|
||||
migrate_project_task_time($db, $langs, $conf);
|
||||
migrate_element_time($db, $langs, $conf);
|
||||
|
||||
migrate_customerorder_shipping($db, $langs, $conf);
|
||||
|
||||
@ -2901,9 +2902,9 @@ function migrate_relationship_tables($db, $langs, $conf, $table, $fk_source, $so
|
||||
* @param Conf $conf Object conf
|
||||
* @return void
|
||||
*/
|
||||
function migrate_project_task_time($db, $langs, $conf)
|
||||
function migrate_element_time($db, $langs, $conf)
|
||||
{
|
||||
dolibarr_install_syslog("upgrade2::migrate_project_task_time");
|
||||
dolibarr_install_syslog("upgrade2::migrate_element_time");
|
||||
|
||||
print '<tr><td colspan="4">';
|
||||
|
||||
@ -2914,8 +2915,8 @@ function migrate_project_task_time($db, $langs, $conf)
|
||||
|
||||
$db->begin();
|
||||
|
||||
$sql = "SELECT rowid, fk_task, task_duration";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."projet_task_time";
|
||||
$sql = "SELECT rowid, fk_element, element_duration";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."element_time";
|
||||
$resql = $db->query($sql);
|
||||
if ($resql) {
|
||||
$i = 0;
|
||||
@ -2928,16 +2929,16 @@ function migrate_project_task_time($db, $langs, $conf)
|
||||
while ($i < $num) {
|
||||
$obj = $db->fetch_object($resql);
|
||||
|
||||
if ($obj->task_duration > 0) {
|
||||
if ($obj->element_duration > 0) {
|
||||
// convert to second
|
||||
// only for int time and float time ex: 1,75 for 1h45
|
||||
list($hour, $min) = explode('.', $obj->task_duration);
|
||||
list($hour, $min) = explode('.', $obj->element_duration);
|
||||
$hour = $hour * 60 * 60;
|
||||
$min = ($min / 100) * 60 * 60;
|
||||
$newtime = $hour + $min;
|
||||
|
||||
$sql2 = "UPDATE ".MAIN_DB_PREFIX."projet_task_time SET";
|
||||
$sql2 .= " task_duration = ".((int) $newtime);
|
||||
$sql2 = "UPDATE ".MAIN_DB_PREFIX."element_time SET";
|
||||
$sql2 .= " element_duration = ".((int) $newtime);
|
||||
$sql2 .= " WHERE rowid = ".((int) $obj->rowid);
|
||||
|
||||
$resql2 = $db->query($sql2);
|
||||
@ -2947,16 +2948,16 @@ function migrate_project_task_time($db, $langs, $conf)
|
||||
}
|
||||
print ". ";
|
||||
$oldtime++;
|
||||
if (!empty($totaltime[$obj->fk_task])) {
|
||||
$totaltime[$obj->fk_task] += $newtime;
|
||||
if (!empty($totaltime[$obj->fk_element])) {
|
||||
$totaltime[$obj->fk_element] += $newtime;
|
||||
} else {
|
||||
$totaltime[$obj->fk_task] = $newtime;
|
||||
$totaltime[$obj->fk_element] = $newtime;
|
||||
}
|
||||
} else {
|
||||
if (!empty($totaltime[$obj->fk_task])) {
|
||||
$totaltime[$obj->fk_task] += $obj->task_duration;
|
||||
if (!empty($totaltime[$obj->fk_element])) {
|
||||
$totaltime[$obj->fk_element] += $obj->element_duration;
|
||||
} else {
|
||||
$totaltime[$obj->fk_task] = $obj->task_duration;
|
||||
$totaltime[$obj->fk_element] = $obj->element_duration;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -41,6 +41,7 @@ AlreadyInGeneralLedger=Already transferred to accounting journals and ledger
|
||||
NotYetInGeneralLedger=Not yet transferred to accouting journals and ledger
|
||||
GroupIsEmptyCheckSetup=Group is empty, check setup of the personalized accounting group
|
||||
DetailByAccount=Show detail by account
|
||||
DetailBy=Detail by
|
||||
AccountWithNonZeroValues=Accounts with non-zero values
|
||||
ListOfAccounts=List of accounts
|
||||
CountriesInEEC=Countries in EEC
|
||||
|
||||
@ -159,9 +159,10 @@ ConfirmDeleteVariousPayment=Are you sure you want to delete this various payment
|
||||
ExportDataset_tax_1=Social and fiscal taxes and payments
|
||||
CalcModeVATDebt=Mode <b>%sVAT on commitment accounting%s</b>.
|
||||
CalcModeVATEngagement=Mode <b>%sVAT on incomes-expenses%s</b>.
|
||||
CalcModeDebt=Analysis of known recorded documents even if they are not yet accounted in ledger.
|
||||
CalcModeEngagement=Analysis of known recorded payments, even if they are not yet accounted in Ledger.
|
||||
CalcModeDebt=Analysis of known recorded documents
|
||||
CalcModeEngagement=Analysis of known recorded payments
|
||||
CalcModeBookkeeping=Analysis of data journalized in Bookkeeping Ledger table.
|
||||
CalcModeNoBookKeeping=Even if they are not yet accounted in Ledger
|
||||
CalcModeLT1= Mode <b>%sRE on customer invoices - suppliers invoices%s</b>
|
||||
CalcModeLT1Debt=Mode <b>%sRE on customer invoices%s</b>
|
||||
CalcModeLT1Rec= Mode <b>%sRE on suppliers invoices%s</b>
|
||||
|
||||
@ -52,7 +52,7 @@ BoxTitleOldestActionsToDo=Événements %s les plus anciens à faire, non termin
|
||||
BoxTitleLastContracts=Les %s derniers contrats modifiés
|
||||
BoxTitleLastModifiedDonations=Les %s derniers dons modifiés
|
||||
BoxTitleLastModifiedExpenses=Les %s dernières notes de frais modifiées
|
||||
BoxTitleLatestModifiedBoms=Les %s derières BOMS modifiées
|
||||
BoxTitleLatestModifiedBoms=Les %s dernières BOMS modifiées
|
||||
BoxTitleLatestModifiedMos=Les %s derniers ordres de fabrication modifiés
|
||||
BoxTitleLastOutstandingBillReached=Clients dont l'en-cours autorisé est dépassé
|
||||
BoxGlobalActivity=Activité globale (factures, propositions, commandes)
|
||||
|
||||
@ -222,6 +222,12 @@ if (!defined('NOREQUIREDB') && !defined('NOREQUIRESOC')) {
|
||||
// For FR, default value of option to show category of operations is on by default. Decret n°2099-1299 2022-10-07
|
||||
$conf->global->INVOICE_CATEGORY_OF_OPERATION = 1;
|
||||
}
|
||||
|
||||
if ($mysoc->localtax1_assuj || $mysoc->localtax2_assuj) {
|
||||
// For countries using the 2nd or 3rd tax, we disable input/edit of lines using the price including tax (because 2nb and 3rd tax not yet taken into account).
|
||||
// Work In Progress to support all taxes into unit price entry when MAIN_UNIT_PRICE_WITH_TAX_IS_FOR_ALL_TAXES is set.
|
||||
$conf->global->MAIN_NO_INPUT_PRICE_WITH_TAX = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -554,7 +554,7 @@ if (!empty($moreforfilter)) {
|
||||
}
|
||||
|
||||
$varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage;
|
||||
$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); // This also change content of $arrayfields
|
||||
$selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')) : ''); // This also change content of $arrayfields
|
||||
$selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : '');
|
||||
|
||||
print '<div class="div-table-responsive">'; // You can use div-table-responsive-no-min if you dont need reserved height for your table
|
||||
@ -631,7 +631,7 @@ $totalarray['nbfield'] = 0;
|
||||
// --------------------------------------------------------------------
|
||||
print '<tr class="liste_titre">';
|
||||
if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
|
||||
print getTitleFieldOfList(($mode != 'kanban' ? $selectedfields : ''), 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n";
|
||||
print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n";
|
||||
$totalarray['nbfield']++;
|
||||
}
|
||||
foreach ($object->fields as $key => $val) {
|
||||
@ -663,7 +663,7 @@ print $hookmanager->resPrint;
|
||||
}*/
|
||||
// Action column
|
||||
if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
|
||||
print getTitleFieldOfList(($mode != 'kanban' ? $selectedfields : ''), 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n";
|
||||
print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n";
|
||||
$totalarray['nbfield']++;
|
||||
}
|
||||
print '</tr>'."\n";
|
||||
|
||||
@ -207,7 +207,7 @@ if ($cancel) {
|
||||
$action = '';
|
||||
}
|
||||
|
||||
$createbarcode = empty($conf->barcode->enabled) ? 0 : 1;
|
||||
$createbarcode = isModEnabled('barcode');
|
||||
if (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->barcode->creer_advance)) {
|
||||
$createbarcode = 0;
|
||||
}
|
||||
@ -1419,7 +1419,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
|
||||
}
|
||||
}
|
||||
|
||||
$showbarcode = empty($conf->barcode->enabled) ? 0 : 1;
|
||||
$showbarcode = isModEnabled('barcode');
|
||||
if (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->barcode->lire_advance)) {
|
||||
$showbarcode = 0;
|
||||
}
|
||||
@ -1984,7 +1984,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
|
||||
}
|
||||
|
||||
// Barcode
|
||||
$showbarcode = empty($conf->barcode->enabled) ? 0 : 1;
|
||||
$showbarcode = isModEnabled('barcode');
|
||||
if (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->barcode->lire_advance)) {
|
||||
$showbarcode = 0;
|
||||
}
|
||||
@ -2312,7 +2312,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
|
||||
} else {
|
||||
// Fiche en mode visu
|
||||
|
||||
$showbarcode = empty($conf->barcode->enabled) ? 0 : 1;
|
||||
$showbarcode = isModEnabled('barcode');
|
||||
if (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->barcode->lire_advance)) {
|
||||
$showbarcode = 0;
|
||||
}
|
||||
|
||||
@ -368,6 +368,8 @@ class MouvementStock extends CommonObject
|
||||
}
|
||||
} else { // If not found, we add record
|
||||
$productlot = new Productlot($this->db);
|
||||
$productlot->origin = !empty($this->origin) ? (empty($this->origin->origin_type) ? $this->origin->element : $this->origin->origin_type) : '';
|
||||
$productlot->origin_id = !empty($this->origin) ? $this->origin->id : 0;
|
||||
$productlot->entity = $conf->entity;
|
||||
$productlot->fk_product = $fk_product;
|
||||
$productlot->batch = $batch;
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
* Copyright (C) 2006-2015 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2010 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2019 Nicolas ZABOURI <info@inovea-conseil.com>
|
||||
* Copyright (C) 2023 Gauthier VERDOL <gauthier.verdol@atm-consulting.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
|
||||
@ -116,15 +117,16 @@ print '<td width="50%">'.$langs->trans('ActivityOnProjectToday').'</td>';
|
||||
print '<td width="50%" class="right">'.$langs->trans("Time").'</td>';
|
||||
print "</tr>\n";
|
||||
|
||||
$sql = "SELECT p.rowid, p.ref, p.title, p.public, SUM(tt.task_duration) as nb";
|
||||
$sql = "SELECT p.rowid, p.ref, p.title, p.public, SUM(tt.element_duration) as nb";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."projet as p";
|
||||
$sql .= ", ".MAIN_DB_PREFIX."projet_task as t";
|
||||
$sql .= ", ".MAIN_DB_PREFIX."projet_task_time as tt";
|
||||
$sql .= ", ".MAIN_DB_PREFIX."element_time as tt";
|
||||
$sql .= " WHERE t.fk_projet = p.rowid";
|
||||
$sql .= " AND p.entity = ".((int) $conf->entity);
|
||||
$sql .= " AND tt.fk_task = t.rowid";
|
||||
$sql .= " AND tt.fk_element = t.rowid";
|
||||
$sql .= " AND tt.elementtype = 'task'";
|
||||
$sql .= " AND tt.fk_user = ".((int) $user->id);
|
||||
$sql .= " AND task_date BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $month, $day, $year))."' AND '".$db->idate(dol_mktime(23, 59, 59, $month, $day, $year))."'";
|
||||
$sql .= " AND element_date BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $month, $day, $year))."' AND '".$db->idate(dol_mktime(23, 59, 59, $month, $day, $year))."'";
|
||||
$sql .= " AND p.rowid in (".$db->sanitize($projectsListId).")";
|
||||
$sql .= " GROUP BY p.rowid, p.ref, p.title, p.public";
|
||||
|
||||
@ -169,15 +171,16 @@ print '<td>'.$langs->trans('ActivityOnProjectYesterday').'</td>';
|
||||
print '<td class="right">'.$langs->trans("Time").'</td>';
|
||||
print "</tr>\n";
|
||||
|
||||
$sql = "SELECT p.rowid, p.ref, p.title, p.public, SUM(tt.task_duration) as nb";
|
||||
$sql = "SELECT p.rowid, p.ref, p.title, p.public, SUM(tt.element_duration) as nb";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."projet as p";
|
||||
$sql .= ", ".MAIN_DB_PREFIX."projet_task as t";
|
||||
$sql .= ", ".MAIN_DB_PREFIX."projet_task_time as tt";
|
||||
$sql .= ", ".MAIN_DB_PREFIX."element_time as tt";
|
||||
$sql .= " WHERE t.fk_projet = p.rowid";
|
||||
$sql .= " AND p.entity = ".((int) $conf->entity);
|
||||
$sql .= " AND tt.fk_task = t.rowid";
|
||||
$sql .= " AND tt.fk_element = t.rowid";
|
||||
$sql .= " AND tt.elementtype = 'task'";
|
||||
$sql .= " AND tt.fk_user = ".((int) $user->id);
|
||||
$sql .= " AND task_date BETWEEN '".$db->idate(dol_time_plus_duree(dol_mktime(0, 0, 0, $month, $day, $year), -1, 'd'))."' AND '".$db->idate(dol_time_plus_duree(dol_mktime(23, 59, 59, $month, $day, $year), -1, 'd'))."'";
|
||||
$sql .= " AND element_date BETWEEN '".$db->idate(dol_time_plus_duree(dol_mktime(0, 0, 0, $month, $day, $year), -1, 'd'))."' AND '".$db->idate(dol_time_plus_duree(dol_mktime(23, 59, 59, $month, $day, $year), -1, 'd'))."'";
|
||||
$sql .= " AND p.rowid in (".$db->sanitize($projectsListId).")";
|
||||
$sql .= " GROUP BY p.rowid, p.ref, p.title, p.public";
|
||||
|
||||
@ -281,15 +284,16 @@ if (!empty($conf->global->PROJECT_TASK_TIME_MONTH)) {
|
||||
print '<td class="right">'.$langs->trans("Time").'</td>';
|
||||
print "</tr>\n";
|
||||
|
||||
$sql = "SELECT p.rowid, p.ref, p.title, p.public, SUM(tt.task_duration) as nb";
|
||||
$sql = "SELECT p.rowid, p.ref, p.title, p.public, SUM(tt.element_duration) as nb";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."projet as p";
|
||||
$sql .= ", ".MAIN_DB_PREFIX."projet_task as t";
|
||||
$sql .= ", ".MAIN_DB_PREFIX."projet_task_time as tt";
|
||||
$sql .= ", ".MAIN_DB_PREFIX."element_time as tt";
|
||||
$sql .= " WHERE t.fk_projet = p.rowid";
|
||||
$sql .= " AND p.entity = ".((int) $conf->entity);
|
||||
$sql .= " AND tt.fk_task = t.rowid";
|
||||
$sql .= " AND tt.fk_element = t.rowid";
|
||||
$sql .= " AND tt.elementtype = 'task'";
|
||||
$sql .= " AND tt.fk_user = ".((int) $user->id);
|
||||
$sql .= " AND task_date BETWEEN '".$db->idate(dol_get_first_day($year, $month))."' AND '".$db->idate(dol_get_last_day($year, $month))."'";
|
||||
$sql .= " AND element_date BETWEEN '".$db->idate(dol_get_first_day($year, $month))."' AND '".$db->idate(dol_get_last_day($year, $month))."'";
|
||||
$sql .= " AND p.rowid in (".$db->sanitize($projectsListId).")";
|
||||
$sql .= " GROUP BY p.rowid, p.ref, p.title, p.public";
|
||||
|
||||
@ -327,15 +331,16 @@ if (!empty($conf->global->PROJECT_TASK_TIME_YEAR)) {
|
||||
print '<td class="right">'.$langs->trans("Time").'</td>';
|
||||
print "</tr>\n";
|
||||
|
||||
$sql = "SELECT p.rowid, p.ref, p.title, p.public, SUM(tt.task_duration) as nb";
|
||||
$sql = "SELECT p.rowid, p.ref, p.title, p.public, SUM(tt.element_duration) as nb";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."projet as p";
|
||||
$sql .= ", ".MAIN_DB_PREFIX."projet_task as t";
|
||||
$sql .= ", ".MAIN_DB_PREFIX."projet_task_time as tt";
|
||||
$sql .= ", ".MAIN_DB_PREFIX."element_time as tt";
|
||||
$sql .= " WHERE t.fk_projet = p.rowid";
|
||||
$sql .= " AND p.entity = ".((int) $conf->entity);
|
||||
$sql .= " AND tt.fk_task = t.rowid";
|
||||
$sql .= " AND tt.fk_element = t.rowid";
|
||||
$sql .= " AND tt.elementtype = 'task'";
|
||||
$sql .= " AND tt.fk_user = ".((int) $user->id);
|
||||
$sql .= " AND YEAR(task_date) = '".strftime("%Y", $now)."'";
|
||||
$sql .= " AND YEAR(element_date) = '".strftime("%Y", $now)."'";
|
||||
$sql .= " AND p.rowid in (".$db->sanitize($projectsListId).")";
|
||||
$sql .= " GROUP BY p.rowid, p.ref, p.title, p.public";
|
||||
|
||||
@ -407,11 +412,11 @@ if (empty($conf->global->PROJECT_HIDE_TASKS) && !empty($conf->global->PROJECT_SH
|
||||
$max = (empty($conf->global->PROJECT_LIMIT_TASK_PROJECT_AREA) ? 1000 : $conf->global->PROJECT_LIMIT_TASK_PROJECT_AREA);
|
||||
|
||||
$sql = "SELECT p.ref, p.title, p.rowid as projectid, p.fk_statut as status, p.fk_opp_status as opp_status, p.public, p.dateo as projdateo, p.datee as projdatee,";
|
||||
$sql .= " t.label, t.rowid as taskid, t.planned_workload, t.duration_effective, t.progress, t.dateo, t.datee, SUM(tasktime.task_duration) as timespent";
|
||||
$sql .= " t.label, t.rowid as taskid, t.planned_workload, t.duration_effective, t.progress, t.dateo, t.datee, SUM(tasktime.element_duration) as timespent";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."projet as p";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s on p.fk_soc = s.rowid";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."projet_task as t on t.fk_projet = p.rowid";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."projet_task_time as tasktime on tasktime.fk_task = t.rowid";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."element_time as tasktime on (tasktime.fk_element = t.rowid AND tasktime.elementtype = 'task')";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user as u on tasktime.fk_user = u.rowid";
|
||||
if ($mine) {
|
||||
$sql .= ", ".MAIN_DB_PREFIX."element_contact as ect";
|
||||
|
||||
@ -7,6 +7,7 @@
|
||||
* Copyright (C) 2017 Ferran Marcet <fmarcet@2byte.es>
|
||||
* Copyright (C) 2019 Juanjo Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2022 Charlene Benke <charlene@patas-monkey.com>
|
||||
* Copyright (C) 2023 Gauthier VERDOL <gauthier.verdol@atm-consulting.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
|
||||
@ -782,8 +783,8 @@ class Project extends CommonObject
|
||||
$sql = "SELECT ed.rowid FROM ".MAIN_DB_PREFIX."expensereport as e, ".MAIN_DB_PREFIX."expensereport_det as ed WHERE e.rowid = ed.fk_expensereport AND e.entity IN (".getEntity('expensereport').") AND ed.fk_projet IN (".$this->db->sanitize($ids).")";
|
||||
} elseif ($type == 'project_task') {
|
||||
$sql = "SELECT DISTINCT pt.rowid FROM ".MAIN_DB_PREFIX."projet_task as pt WHERE pt.fk_projet IN (".$this->db->sanitize($ids).")";
|
||||
} elseif ($type == 'project_task_time') { // Case we want to duplicate line foreach user
|
||||
$sql = "SELECT DISTINCT pt.rowid, ptt.fk_user FROM ".MAIN_DB_PREFIX."projet_task as pt, ".MAIN_DB_PREFIX."projet_task_time as ptt WHERE pt.rowid = ptt.fk_task AND pt.fk_projet IN (".$this->db->sanitize($ids).")";
|
||||
} elseif ($type == 'element_time') { // Case we want to duplicate line foreach user
|
||||
$sql = "SELECT DISTINCT pt.rowid, ptt.fk_user FROM ".MAIN_DB_PREFIX."projet_task as pt, ".MAIN_DB_PREFIX."element_time as ptt WHERE pt.rowid = ptt.fk_element AND ptt.elementtype = 'task' AND pt.fk_projet IN (".$this->db->sanitize($ids).")";
|
||||
} elseif ($type == 'stock_mouvement') {
|
||||
$sql = "SELECT ms.rowid, ms.fk_user_author as fk_user FROM ".MAIN_DB_PREFIX."stock_mouvement as ms, ".MAIN_DB_PREFIX."entrepot as e WHERE e.rowid = ms.fk_entrepot AND e.entity IN (".getEntity('stock').") AND ms.origintype = 'project' AND ms.fk_origin IN (".$this->db->sanitize($ids).") AND ms.type_mouvement = 1";
|
||||
} elseif ($type == 'loan') {
|
||||
@ -1041,8 +1042,8 @@ class Project extends CommonObject
|
||||
$sql = "SELECT COUNT(ed.rowid) as nb FROM ".MAIN_DB_PREFIX."expensereport as e, ".MAIN_DB_PREFIX."expensereport_det as ed WHERE e.rowid = ed.fk_expensereport AND e.entity IN (".getEntity('expensereport').") AND ed.fk_projet = ".((int) $this->id);
|
||||
} elseif ($type == 'project_task') {
|
||||
$sql = "SELECT DISTINCT COUNT(pt.rowid) as nb FROM ".MAIN_DB_PREFIX."projet_task as pt WHERE pt.fk_projet = ".((int) $this->id);
|
||||
} elseif ($type == 'project_task_time') { // Case we want to duplicate line foreach user
|
||||
$sql = "SELECT DISTINCT COUNT(pt.rowid) as nb FROM ".MAIN_DB_PREFIX."projet_task as pt, ".MAIN_DB_PREFIX."projet_task_time as ptt WHERE pt.rowid = ptt.fk_task AND pt.fk_projet = ".((int) $this->id);
|
||||
} elseif ($type == 'element_time') { // Case we want to duplicate line foreach user
|
||||
$sql = "SELECT DISTINCT COUNT(pt.rowid) as nb FROM ".MAIN_DB_PREFIX."projet_task as pt, ".MAIN_DB_PREFIX."element_time as ptt WHERE pt.rowid = ptt.fk_element AND ptt.elementtype = 'task' AND pt.fk_projet = ".((int) $this->id);
|
||||
} elseif ($type == 'stock_mouvement') {
|
||||
$sql = "SELECT COUNT(ms.rowid) as nb FROM ".MAIN_DB_PREFIX."stock_mouvement as ms, ".MAIN_DB_PREFIX."entrepot as e WHERE e.rowid = ms.fk_entrepot AND e.entity IN (".getEntity('stock').") AND ms.origintype = 'project' AND ms.fk_origin = ".((int) $this->id)." AND ms.type_mouvement = 1";
|
||||
} elseif ($type == 'loan') {
|
||||
@ -2017,14 +2018,15 @@ class Project extends CommonObject
|
||||
dol_print_error('', 'Error datestart parameter is empty');
|
||||
}
|
||||
|
||||
$sql = "SELECT ptt.rowid as taskid, ptt.task_duration, ptt.task_date, ptt.task_datehour, ptt.fk_task";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."projet_task_time AS ptt, ".MAIN_DB_PREFIX."projet_task as pt";
|
||||
$sql .= " WHERE ptt.fk_task = pt.rowid";
|
||||
$sql = "SELECT ptt.rowid as taskid, ptt.element_duration, ptt.element_date, ptt.element_datehour, ptt.fk_element";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."element_time AS ptt, ".MAIN_DB_PREFIX."projet_task as pt";
|
||||
$sql .= " WHERE ptt.fk_element = pt.rowid";
|
||||
$sql .= " AND ptt.elementtype = 'task'";
|
||||
$sql .= " AND pt.fk_projet = ".((int) $this->id);
|
||||
$sql .= " AND (ptt.task_date >= '".$this->db->idate($datestart)."' ";
|
||||
$sql .= " AND ptt.task_date <= '".$this->db->idate(dol_time_plus_duree($datestart, 1, 'w') - 1)."')";
|
||||
$sql .= " AND (ptt.element_date >= '".$this->db->idate($datestart)."' ";
|
||||
$sql .= " AND ptt.element_date <= '".$this->db->idate(dol_time_plus_duree($datestart, 1, 'w') - 1)."')";
|
||||
if ($taskid) {
|
||||
$sql .= " AND ptt.fk_task=".((int) $taskid);
|
||||
$sql .= " AND ptt.fk_element=".((int) $taskid);
|
||||
}
|
||||
if (is_numeric($userid)) {
|
||||
$sql .= " AND ptt.fk_user=".((int) $userid);
|
||||
@ -2040,13 +2042,13 @@ class Project extends CommonObject
|
||||
// Loop on each record found, so each couple (project id, task id)
|
||||
while ($i < $num) {
|
||||
$obj = $this->db->fetch_object($resql);
|
||||
$day = $this->db->jdate($obj->task_date); // task_date is date without hours
|
||||
$day = $this->db->jdate($obj->element_date); // task_date is date without hours
|
||||
if (empty($daylareadyfound[$day])) {
|
||||
$this->weekWorkLoad[$day] = $obj->task_duration;
|
||||
$this->weekWorkLoadPerTask[$day][$obj->fk_task] = $obj->task_duration;
|
||||
$this->weekWorkLoad[$day] = $obj->element_duration;
|
||||
$this->weekWorkLoadPerTask[$day][$obj->fk_element] = $obj->element_duration;
|
||||
} else {
|
||||
$this->weekWorkLoad[$day] += $obj->task_duration;
|
||||
$this->weekWorkLoadPerTask[$day][$obj->fk_task] += $obj->task_duration;
|
||||
$this->weekWorkLoad[$day] += $obj->element_duration;
|
||||
$this->weekWorkLoadPerTask[$day][$obj->fk_element] += $obj->element_duration;
|
||||
}
|
||||
$daylareadyfound[$day] = 1;
|
||||
$i++;
|
||||
@ -2080,14 +2082,15 @@ class Project extends CommonObject
|
||||
dol_print_error('', 'Error datestart parameter is empty');
|
||||
}
|
||||
|
||||
$sql = "SELECT ptt.rowid as taskid, ptt.task_duration, ptt.task_date, ptt.task_datehour, ptt.fk_task";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."projet_task_time AS ptt, ".MAIN_DB_PREFIX."projet_task as pt";
|
||||
$sql .= " WHERE ptt.fk_task = pt.rowid";
|
||||
$sql = "SELECT ptt.rowid as taskid, ptt.element_duration, ptt.element_date, ptt.element_datehour, ptt.fk_element";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."element_time AS ptt, ".MAIN_DB_PREFIX."projet_task as pt";
|
||||
$sql .= " WHERE ptt.fk_element = pt.rowid";
|
||||
$sql .= " AND ptt.elementtype = 'task'";
|
||||
$sql .= " AND pt.fk_projet = ".((int) $this->id);
|
||||
$sql .= " AND (ptt.task_date >= '".$this->db->idate($datestart)."' ";
|
||||
$sql .= " AND ptt.task_date <= '".$this->db->idate(dol_time_plus_duree($datestart, 1, 'm') - 1)."')";
|
||||
$sql .= " AND (ptt.element_date >= '".$this->db->idate($datestart)."' ";
|
||||
$sql .= " AND ptt.element_date <= '".$this->db->idate(dol_time_plus_duree($datestart, 1, 'm') - 1)."')";
|
||||
if ($taskid) {
|
||||
$sql .= " AND ptt.fk_task=".((int) $taskid);
|
||||
$sql .= " AND ptt.fk_element=".((int) $taskid);
|
||||
}
|
||||
if (is_numeric($userid)) {
|
||||
$sql .= " AND ptt.fk_user=".((int) $userid);
|
||||
@ -2103,16 +2106,16 @@ class Project extends CommonObject
|
||||
// Loop on each record found, so each couple (project id, task id)
|
||||
while ($i < $num) {
|
||||
$obj = $this->db->fetch_object($resql);
|
||||
if (!empty($obj->task_date)) {
|
||||
$date = explode('-', $obj->task_date);
|
||||
if (!empty($obj->element_date)) {
|
||||
$date = explode('-', $obj->element_date);
|
||||
$week_number = getWeekNumber($date[2], $date[1], $date[0]);
|
||||
}
|
||||
if (empty($weekalreadyfound[$week_number])) {
|
||||
$this->monthWorkLoad[$week_number] = $obj->task_duration;
|
||||
$this->monthWorkLoadPerTask[$week_number][$obj->fk_task] = $obj->task_duration;
|
||||
$this->monthWorkLoad[$week_number] = $obj->element_duration;
|
||||
$this->monthWorkLoadPerTask[$week_number][$obj->fk_element] = $obj->element_duration;
|
||||
} else {
|
||||
$this->monthWorkLoad[$week_number] += $obj->task_duration;
|
||||
$this->monthWorkLoadPerTask[$week_number][$obj->fk_task] += $obj->task_duration;
|
||||
$this->monthWorkLoad[$week_number] += $obj->element_duration;
|
||||
$this->monthWorkLoadPerTask[$week_number][$obj->fk_element] += $obj->element_duration;
|
||||
}
|
||||
$weekalreadyfound[$week_number] = 1;
|
||||
$i++;
|
||||
|
||||
@ -5,6 +5,7 @@
|
||||
* Copyright (C) 2018-2023 Frédéric France <frederic.france@netlogic.fr>
|
||||
* Copyright (C) 2020 Juanjo Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2022 Charlene Benke <charlene@patas-monkey.com>
|
||||
* Copyright (C) 2023 Gauthier VERDOL <gauthier.verdol@atm-consulting.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
|
||||
@ -29,6 +30,7 @@
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/commonobjectline.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/timespent.class.php';
|
||||
|
||||
|
||||
/**
|
||||
@ -49,7 +51,7 @@ class Task extends CommonObjectLine
|
||||
/**
|
||||
* @var string Field with ID of parent key if this field has a parent
|
||||
*/
|
||||
public $fk_element = 'fk_task';
|
||||
public $fk_element = 'fk_element';
|
||||
|
||||
/**
|
||||
* @var string String with name of icon for myobject.
|
||||
@ -60,7 +62,7 @@ class Task extends CommonObjectLine
|
||||
* @var array List of child tables. To test if we can delete object.
|
||||
*/
|
||||
protected $childtables = array(
|
||||
'projet_task_time' => array('name' => 'Task', 'parent' => 'projet_task', 'parentkey' => 'fk_task')
|
||||
'element_time' => array('name' => 'Task', 'parent' => 'projet_task', 'parentkey' => 'fk_element', 'parenttypefield' => 'elementtype', 'parenttypevalue' => 'task')
|
||||
);
|
||||
|
||||
/**
|
||||
@ -558,8 +560,8 @@ class Task extends CommonObjectLine
|
||||
}
|
||||
|
||||
if (!$error) {
|
||||
$sql = "DELETE FROM ".MAIN_DB_PREFIX."projet_task_time";
|
||||
$sql .= " WHERE fk_task = ".((int) $this->id);
|
||||
$sql = "DELETE FROM ".MAIN_DB_PREFIX."element_time";
|
||||
$sql .= " WHERE fk_element = ".((int) $this->id)." AND elementtype = 'task'";
|
||||
|
||||
$resql = $this->db->query($sql);
|
||||
if (!$resql) {
|
||||
@ -675,8 +677,9 @@ class Task extends CommonObjectLine
|
||||
$ret = 0;
|
||||
|
||||
$sql = "SELECT COUNT(*) as nb";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."projet_task_time";
|
||||
$sql .= " WHERE fk_task = ".((int) $this->id);
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."element_time";
|
||||
$sql .= " WHERE fk_element = ".((int) $this->id);
|
||||
$sql .= " AND elementtype = 'task'";
|
||||
|
||||
dol_syslog(get_class($this)."::hasTimeSpent", LOG_DEBUG);
|
||||
$resql = $this->db->query($sql);
|
||||
@ -879,7 +882,7 @@ class Task extends CommonObjectLine
|
||||
}
|
||||
}
|
||||
if ($includebilltime) {
|
||||
$sql .= ", SUM(tt.task_duration * ".$this->db->ifsql("invoice_id IS NULL", "1", "0").") as tobill, SUM(tt.task_duration * ".$this->db->ifsql("invoice_id IS NULL", "0", "1").") as billed";
|
||||
$sql .= ", SUM(tt.element_duration * ".$this->db->ifsql("invoice_id IS NULL", "1", "0").") as tobill, SUM(tt.element_duration * ".$this->db->ifsql("invoice_id IS NULL", "0", "1").") as billed";
|
||||
}
|
||||
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."projet as p";
|
||||
@ -893,7 +896,7 @@ class Task extends CommonObjectLine
|
||||
}
|
||||
$sql .= ", ".MAIN_DB_PREFIX."projet_task as t";
|
||||
if ($includebilltime) {
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."projet_task_time as tt ON tt.fk_task = t.rowid";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."element_time as tt ON (tt.fk_element = t.rowid AND tt.elementtype='task')";
|
||||
}
|
||||
if ($filterontaskuser > 0) {
|
||||
$sql .= ", ".MAIN_DB_PREFIX."element_contact as ec2";
|
||||
@ -910,14 +913,14 @@ class Task extends CommonObjectLine
|
||||
if ($filterontaskuser > 0) {
|
||||
$sql .= ", ".MAIN_DB_PREFIX."projet_task as t";
|
||||
if ($includebilltime) {
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."projet_task_time as tt ON tt.fk_task = t.rowid";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."element_time as tt ON (tt.fk_element = t.rowid AND tt.elementtype='task')";
|
||||
}
|
||||
$sql .= ", ".MAIN_DB_PREFIX."element_contact as ec2";
|
||||
$sql .= ", ".MAIN_DB_PREFIX."c_type_contact as ctc2";
|
||||
} else {
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."projet_task as t on t.fk_projet = p.rowid";
|
||||
if ($includebilltime) {
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."projet_task_time as tt ON tt.fk_task = t.rowid";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."element_time as tt ON (tt.fk_element = t.rowid AND tt.elementtype = 'task')";
|
||||
}
|
||||
}
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."projet_task_extrafields as efpt ON (t.rowid = efpt.fk_object)";
|
||||
@ -1263,31 +1266,20 @@ class Task extends CommonObjectLine
|
||||
|
||||
$this->db->begin();
|
||||
|
||||
$sql = "INSERT INTO ".MAIN_DB_PREFIX."projet_task_time (";
|
||||
$sql .= "fk_task";
|
||||
$sql .= ", task_date";
|
||||
$sql .= ", task_datehour";
|
||||
$sql .= ", task_date_withhour";
|
||||
$sql .= ", task_duration";
|
||||
$sql .= ", fk_user";
|
||||
$sql .= ", fk_product";
|
||||
$sql .= ", note";
|
||||
$sql .= ", datec";
|
||||
$sql .= ") VALUES (";
|
||||
$sql .= ((int) $this->id);
|
||||
$sql .= ", '".$this->db->idate($this->timespent_date)."'";
|
||||
$sql .= ", '".$this->db->idate($this->timespent_datehour)."'";
|
||||
$sql .= ", ".(empty($this->timespent_withhour) ? 0 : 1);
|
||||
$sql .= ", ".((int) $this->timespent_duration);
|
||||
$sql .= ", ".((int) $this->timespent_fk_user);
|
||||
$sql .= ", ".((int) $this->timespent_fk_product);
|
||||
$sql .= ", ".(isset($this->timespent_note) ? "'".$this->db->escape($this->timespent_note)."'" : "null");
|
||||
$sql .= ", '".$this->db->idate($now)."'";
|
||||
$sql .= ")";
|
||||
$timespent = new TimeSpent($this->db);
|
||||
$timespent->fk_element = $this->id;
|
||||
$timespent->elementtype = 'task';
|
||||
$timespent->element_date = $this->timespent_date;
|
||||
$timespent->element_datehour = $this->timespent_datehour;
|
||||
$timespent->element_date_withhour = $this->timespent_withhour;
|
||||
$timespent->element_duration = $this->timespent_duration;
|
||||
$timespent->fk_user = $this->timespent_fk_user;
|
||||
$timespent->fk_product = $this->timespent_fk_product;
|
||||
$timespent->note = $this->timespent_note;
|
||||
$timespent->datec = $this->db->idate($now);
|
||||
|
||||
$resql = $this->db->query($sql);
|
||||
if ($resql) {
|
||||
$tasktime_id = $this->db->last_insert_id(MAIN_DB_PREFIX."projet_task_time");
|
||||
if ($timespent->create($user) > 0) {
|
||||
$tasktime_id = $this->db->last_insert_id(MAIN_DB_PREFIX."element_time");
|
||||
$ret = $tasktime_id;
|
||||
$this->timespent_id = $ret;
|
||||
|
||||
@ -1307,7 +1299,7 @@ class Task extends CommonObjectLine
|
||||
if ($ret > 0) {
|
||||
// Recalculate amount of time spent for task and update denormalized field
|
||||
$sql = "UPDATE ".MAIN_DB_PREFIX."projet_task";
|
||||
$sql .= " SET duration_effective = (SELECT SUM(task_duration) FROM ".MAIN_DB_PREFIX."projet_task_time as ptt where ptt.fk_task = ".((int) $this->id).")";
|
||||
$sql .= " SET duration_effective = (SELECT SUM(element_duration) FROM ".MAIN_DB_PREFIX."element_time as ptt where ptt.elementtype = 'task' AND ptt.fk_element = ".((int) $this->id).")";
|
||||
if (isset($this->progress)) {
|
||||
$sql .= ", progress = ".((float) $this->progress); // Do not overwrite value if not provided
|
||||
}
|
||||
@ -1320,12 +1312,15 @@ class Task extends CommonObjectLine
|
||||
}
|
||||
|
||||
// Update hourly rate of this time spent entry
|
||||
$sql = "UPDATE ".MAIN_DB_PREFIX."projet_task_time";
|
||||
$sql .= " SET thm = (SELECT thm FROM ".MAIN_DB_PREFIX."user WHERE rowid = ".((int) $this->timespent_fk_user).")"; // set average hour rate of user
|
||||
$sql .= " WHERE rowid = ".((int) $tasktime_id);
|
||||
$resql_thm_user = $this->db->query("SELECT thm FROM " . MAIN_DB_PREFIX . "user WHERE rowid = " . ((int) $timespent->fk_user));
|
||||
if (!empty($resql_thm_user)) {
|
||||
$obj_thm_user = $this->db->fetch_object($resql_thm_user);
|
||||
$timespent->thm = $obj_thm_user->thm;
|
||||
}
|
||||
$res_update = $timespent->update($user);
|
||||
|
||||
dol_syslog(get_class($this)."::addTimeSpent", LOG_DEBUG);
|
||||
if (!$this->db->query($sql)) {
|
||||
if ($res_update <= 0) {
|
||||
$this->error = $this->db->lasterror();
|
||||
$ret = -2;
|
||||
}
|
||||
@ -1356,11 +1351,11 @@ class Task extends CommonObjectLine
|
||||
$sql .= " s.nom as thirdparty_name,";
|
||||
$sql .= " s.email as thirdparty_email,";
|
||||
$sql .= " ptt.rowid,";
|
||||
$sql .= " ptt.fk_task,";
|
||||
$sql .= " ptt.task_date,";
|
||||
$sql .= " ptt.task_datehour,";
|
||||
$sql .= " ptt.task_date_withhour,";
|
||||
$sql .= " ptt.task_duration,";
|
||||
$sql .= " ptt.fk_element as fk_task,";
|
||||
$sql .= " ptt.element_date as task_date,";
|
||||
$sql .= " ptt.element_datehour as task_datehour,";
|
||||
$sql .= " ptt.element_date_withhour as task_date_withhour,";
|
||||
$sql .= " ptt.element_duration as task_duration,";
|
||||
$sql .= " ptt.fk_user,";
|
||||
$sql .= " ptt.note,";
|
||||
$sql .= " ptt.thm,";
|
||||
@ -1371,9 +1366,10 @@ class Task extends CommonObjectLine
|
||||
$sql .= " p.ref as project_ref,";
|
||||
$sql .= " p.title as project_label,";
|
||||
$sql .= " p.public as public";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."projet_task_time as ptt, ".MAIN_DB_PREFIX."projet_task as pt, ".MAIN_DB_PREFIX."projet as p";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."element_time as ptt, ".MAIN_DB_PREFIX."projet_task as pt, ".MAIN_DB_PREFIX."projet as p";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON p.fk_soc = s.rowid";
|
||||
$sql .= " WHERE ptt.fk_task = pt.rowid AND pt.fk_projet = p.rowid";
|
||||
$sql .= " WHERE ptt.fk_element = pt.rowid AND pt.fk_projet = p.rowid";
|
||||
$sql .= " AND ptt.elementtype = 'task'";
|
||||
$sql .= " AND pt.rowid = ".((int) $this->id);
|
||||
$sql .= " AND pt.entity IN (".getEntity('project').")";
|
||||
if ($morewherefilter) {
|
||||
@ -1454,19 +1450,19 @@ class Task extends CommonObjectLine
|
||||
$result = array();
|
||||
|
||||
$sql = "SELECT";
|
||||
$sql .= " MIN(t.task_datehour) as min_date,";
|
||||
$sql .= " MAX(t.task_datehour) as max_date,";
|
||||
$sql .= " SUM(t.task_duration) as total_duration,";
|
||||
$sql .= " SUM(t.task_duration / 3600 * ".$this->db->ifsql("t.thm IS NULL", 0, "t.thm").") as total_amount,";
|
||||
$sql .= " MIN(t.element_datehour) as min_date,";
|
||||
$sql .= " MAX(t.element_datehour) as max_date,";
|
||||
$sql .= " SUM(t.element_duration) as total_duration,";
|
||||
$sql .= " SUM(t.element_duration / 3600 * ".$this->db->ifsql("t.thm IS NULL", 0, "t.thm").") as total_amount,";
|
||||
$sql .= " COUNT(t.rowid) as nblines,";
|
||||
$sql .= " SUM(".$this->db->ifsql("t.thm IS NULL", 1, 0).") as nblinesnull";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."projet_task_time as t";
|
||||
$sql .= " WHERE 1 = 1";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."element_time as t";
|
||||
$sql .= " WHERE t.elementtype='task'";
|
||||
if ($morewherefilter) {
|
||||
$sql .= $morewherefilter;
|
||||
}
|
||||
if ($id > 0) {
|
||||
$sql .= " AND t.fk_task = ".((int) $id);
|
||||
$sql .= " AND t.fk_element = ".((int) $id);
|
||||
}
|
||||
if ($userid > 0) {
|
||||
$sql .= " AND t.fk_user = ".((int) $userid);
|
||||
@ -1514,19 +1510,19 @@ class Task extends CommonObjectLine
|
||||
$result = array();
|
||||
|
||||
$sql = "SELECT";
|
||||
$sql .= " SUM(t.task_duration) as nbseconds,";
|
||||
$sql .= " SUM(t.task_duration / 3600 * ".$this->db->ifsql("t.thm IS NULL", 0, "t.thm").") as amount, SUM(".$this->db->ifsql("t.thm IS NULL", 1, 0).") as nblinesnull";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."projet_task_time as t";
|
||||
$sql .= " WHERE t.fk_task = ".((int) $id);
|
||||
$sql .= " SUM(t.element_duration) as nbseconds,";
|
||||
$sql .= " SUM(t.element_duration / 3600 * ".$this->db->ifsql("t.thm IS NULL", 0, "t.thm").") as amount, SUM(".$this->db->ifsql("t.thm IS NULL", 1, 0).") as nblinesnull";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."element_time as t";
|
||||
$sql .= " WHERE t.elementtype='task' AND t.fk_element = ".((int) $id);
|
||||
if (is_object($fuser) && $fuser->id > 0) {
|
||||
$sql .= " AND fk_user = ".((int) $fuser->id);
|
||||
}
|
||||
if ($dates > 0) {
|
||||
$datefieldname = "task_datehour";
|
||||
$datefieldname = "element_datehour";
|
||||
$sql .= " AND (".$datefieldname." >= '".$this->db->idate($dates)."' OR ".$datefieldname." IS NULL)";
|
||||
}
|
||||
if ($datee > 0) {
|
||||
$datefieldname = "task_datehour";
|
||||
$datefieldname = "element_datehour";
|
||||
$sql .= " AND (".$datefieldname." <= '".$this->db->idate($datee)."' OR ".$datefieldname." IS NULL)";
|
||||
}
|
||||
//print $sql;
|
||||
@ -1558,45 +1554,27 @@ class Task extends CommonObjectLine
|
||||
{
|
||||
global $langs;
|
||||
|
||||
$sql = "SELECT";
|
||||
$sql .= " t.rowid,";
|
||||
$sql .= " t.fk_task,";
|
||||
$sql .= " t.task_date,";
|
||||
$sql .= " t.task_datehour,";
|
||||
$sql .= " t.task_date_withhour,";
|
||||
$sql .= " t.task_duration,";
|
||||
$sql .= " t.fk_user,";
|
||||
$sql .= " t.fk_product,";
|
||||
$sql .= " t.thm,";
|
||||
$sql .= " t.note";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."projet_task_time as t";
|
||||
$sql .= " WHERE t.rowid = ".((int) $id);
|
||||
$timespent = new TimeSpent($this->db);
|
||||
$timespent->fetch($id);
|
||||
|
||||
dol_syslog(get_class($this)."::fetchTimeSpent", LOG_DEBUG);
|
||||
$resql = $this->db->query($sql);
|
||||
if ($resql) {
|
||||
if ($this->db->num_rows($resql)) {
|
||||
$obj = $this->db->fetch_object($resql);
|
||||
|
||||
$this->timespent_id = $obj->rowid;
|
||||
$this->id = $obj->fk_task;
|
||||
$this->timespent_date = $this->db->jdate($obj->task_date);
|
||||
$this->timespent_datehour = $this->db->jdate($obj->task_datehour);
|
||||
$this->timespent_withhour = $obj->task_date_withhour;
|
||||
$this->timespent_duration = $obj->task_duration;
|
||||
$this->timespent_fk_user = $obj->fk_user;
|
||||
$this->timespent_fk_product = $obj->fk_product;
|
||||
$this->timespent_thm = $obj->thm; // hourly rate
|
||||
$this->timespent_note = $obj->note;
|
||||
}
|
||||
|
||||
$this->db->free($resql);
|
||||
if ($timespent->id > 0) {
|
||||
$this->timespent_id = $timespent->id;
|
||||
$this->id = $timespent->fk_element;
|
||||
$this->timespent_date = $this->db->jdate($timespent->element_date);
|
||||
$this->timespent_datehour = $this->db->jdate($timespent->element_datehour);
|
||||
$this->timespent_withhour = $timespent->element_date_withhour;
|
||||
$this->timespent_duration = $timespent->element_duration;
|
||||
$this->timespent_fk_user = $timespent->fk_user;
|
||||
$this->timespent_fk_product = $timespent->fk_product;
|
||||
$this->timespent_thm = $timespent->thm; // hourly rate
|
||||
$this->timespent_note = $timespent->note;
|
||||
|
||||
return 1;
|
||||
} else {
|
||||
$this->error = "Error ".$this->db->lasterror();
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1615,11 +1593,11 @@ class Task extends CommonObjectLine
|
||||
$sql .= " s.nom as thirdparty_name,";
|
||||
$sql .= " s.email as thirdparty_email,";
|
||||
$sql .= " ptt.rowid,";
|
||||
$sql .= " ptt.fk_task,";
|
||||
$sql .= " ptt.task_date,";
|
||||
$sql .= " ptt.task_datehour,";
|
||||
$sql .= " ptt.task_date_withhour,";
|
||||
$sql .= " ptt.task_duration,";
|
||||
$sql .= " ptt.fk_element as fk_task,";
|
||||
$sql .= " ptt.element_date as task_date,";
|
||||
$sql .= " ptt.element_datehour as task_datehour,";
|
||||
$sql .= " ptt.element_date_withhour as task_date_withhour,";
|
||||
$sql .= " ptt.element_duration as task_duration,";
|
||||
$sql .= " ptt.fk_user,";
|
||||
$sql .= " ptt.note,";
|
||||
$sql .= " ptt.thm,";
|
||||
@ -1630,9 +1608,10 @@ class Task extends CommonObjectLine
|
||||
$sql .= " p.ref as project_ref,";
|
||||
$sql .= " p.title as project_label,";
|
||||
$sql .= " p.public as public";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."projet_task_time as ptt, ".MAIN_DB_PREFIX."projet_task as pt, ".MAIN_DB_PREFIX."projet as p";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."element_time as ptt, ".MAIN_DB_PREFIX."projet_task as pt, ".MAIN_DB_PREFIX."projet as p";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON p.fk_soc = s.rowid";
|
||||
$sql .= " WHERE ptt.fk_task = pt.rowid AND pt.fk_projet = p.rowid";
|
||||
$sql .= " WHERE ptt.fk_element = pt.rowid AND pt.fk_projet = p.rowid";
|
||||
$sql .= " AND ptt.elementtype = 'task'";
|
||||
$sql .= " AND ptt.fk_user = ".((int) $userobj->id);
|
||||
$sql .= " AND pt.entity IN (".getEntity('project').")";
|
||||
if ($morewherefilter) {
|
||||
@ -1731,20 +1710,20 @@ class Task extends CommonObjectLine
|
||||
|
||||
$this->db->begin();
|
||||
|
||||
$sql = "UPDATE ".MAIN_DB_PREFIX."projet_task_time SET";
|
||||
$sql .= " task_date = '".$this->db->idate($this->timespent_date)."',";
|
||||
$sql .= " task_datehour = '".$this->db->idate($this->timespent_datehour)."',";
|
||||
$sql .= " task_date_withhour = ".(empty($this->timespent_withhour) ? 0 : 1).",";
|
||||
$sql .= " task_duration = ".((int) $this->timespent_duration).",";
|
||||
$sql .= " fk_user = ".((int) $this->timespent_fk_user).",";
|
||||
$sql .= " fk_product = ".((int) $this->timespent_fk_product).",";
|
||||
$sql .= " invoice_id = ".((int) $this->timespent_invoiceid).",";
|
||||
$sql .= " invoice_line_id = ".((int) $this->timespent_invoicelineid).",";
|
||||
$sql .= " note = ".(isset($this->timespent_note) ? "'".$this->db->escape($this->timespent_note)."'" : "null");
|
||||
$sql .= " WHERE rowid = ".((int) $this->timespent_id);
|
||||
$timespent = new TimeSpent($this->db);
|
||||
$timespent->fetch($this->timespent_id);
|
||||
$timespent->element_date = $this->timespent_date;
|
||||
$timespent->element_datehour = $this->timespent_datehour;
|
||||
$timespent->element_date_withhour = $this->timespent_withhour;
|
||||
$timespent->element_duration = $this->timespent_duration;
|
||||
$timespent->fk_user = $this->timespent_fk_user;
|
||||
$timespent->fk_product = $this->timespent_fk_product;
|
||||
$timespent->note = $this->timespent_note;
|
||||
$timespent->invoice_id = $this->timespent_invoiceid;
|
||||
$timespent->invoice_line_id = $this->timespent_invoicelineid;
|
||||
|
||||
dol_syslog(get_class($this)."::updateTimeSpent", LOG_DEBUG);
|
||||
if ($this->db->query($sql)) {
|
||||
if ($timespent->update($user) > 0) {
|
||||
if (!$notrigger) {
|
||||
// Call trigger
|
||||
$result = $this->call_trigger('TASK_TIMESPENT_MODIFY', $user);
|
||||
@ -1768,7 +1747,7 @@ class Task extends CommonObjectLine
|
||||
if ($this->timespent_old_duration != $this->timespent_duration) {
|
||||
// Recalculate amount of time spent for task and update denormalized field
|
||||
$sql = "UPDATE " . MAIN_DB_PREFIX . "projet_task";
|
||||
$sql .= " SET duration_effective = (SELECT SUM(task_duration) FROM " . MAIN_DB_PREFIX . "projet_task_time as ptt where ptt.fk_task = " . ((int) $this->id) . ")";
|
||||
$sql .= " SET duration_effective = (SELECT SUM(element_duration) FROM " . MAIN_DB_PREFIX . "element_time as ptt where ptt.elementtype = 'task' AND ptt.fk_element = " . ((int) $this->id) . ")";
|
||||
if (isset($this->progress)) {
|
||||
$sql .= ", progress = " . ((float) $this->progress); // Do not overwrite value if not provided
|
||||
}
|
||||
@ -1783,15 +1762,18 @@ class Task extends CommonObjectLine
|
||||
}
|
||||
|
||||
// Update hourly rate of this time spent entry, but only if it was not set initialy
|
||||
$sql = "UPDATE ".MAIN_DB_PREFIX."projet_task_time";
|
||||
$sql .= " SET thm = (SELECT thm FROM ".MAIN_DB_PREFIX."user WHERE rowid = ".((int) $this->timespent_fk_user).")"; // set average hour rate of user
|
||||
$sql .= " WHERE rowid = ".((int) $this->timespent_id);
|
||||
if (empty($conf->global->TIMESPENT_ALWAYS_UPDATE_THM)) { // then if not empty we always update, in case of new thm for user, or change user of task time line
|
||||
$sql .= " AND (thm IS NULL OR thm = 0)";
|
||||
$res_update = 1;
|
||||
if (empty($timespent->thm) || !empty($conf->global->TIMESPENT_ALWAYS_UPDATE_THM)) {
|
||||
$resql_thm_user = $this->db->query("SELECT thm FROM " . MAIN_DB_PREFIX . "user WHERE rowid = " . ((int) $timespent->fk_user));
|
||||
if (!empty($resql_thm_user)) {
|
||||
$obj_thm_user = $this->db->fetch_object($resql_thm_user);
|
||||
$timespent->thm = $obj_thm_user->thm;
|
||||
}
|
||||
$res_update = $timespent->update($user);
|
||||
}
|
||||
|
||||
dol_syslog(get_class($this)."::addTimeSpent", LOG_DEBUG);
|
||||
if (!$this->db->query($sql)) {
|
||||
dol_syslog(get_class($this)."::updateTimeSpent", LOG_DEBUG);
|
||||
if ($res_update <= 0) {
|
||||
$this->error = $this->db->lasterror();
|
||||
$ret = -2;
|
||||
}
|
||||
@ -1839,12 +1821,12 @@ class Task extends CommonObjectLine
|
||||
}
|
||||
|
||||
if (!$error) {
|
||||
$sql = "DELETE FROM ".MAIN_DB_PREFIX."projet_task_time";
|
||||
$sql .= " WHERE rowid = ".((int) $this->timespent_id);
|
||||
$timespent = new TimeSpent($this->db);
|
||||
$timespent->fetch($this->timespent_id);
|
||||
|
||||
dol_syslog(get_class($this)."::delTimeSpent", LOG_DEBUG);
|
||||
$resql = $this->db->query($sql);
|
||||
if (!$resql) {
|
||||
$res_del = $timespent->delete($user);
|
||||
|
||||
if ($res_del < 0) {
|
||||
$error++; $this->errors[] = "Error ".$this->db->lasterror();
|
||||
}
|
||||
}
|
||||
|
||||
@ -8,6 +8,7 @@
|
||||
* Copyright (C) 2016 Josep Lluís Amador <joseplluis@lliuretic.cat>
|
||||
* Copyright (C) 2021 Gauthier VERDOL <gauthier.verdol@atm-consulting.fr>
|
||||
* Copyright (C) 2021 Noé Cendrier <noe.cendrier@altairis.fr>
|
||||
* Copyright (C) 2023 Gauthier VERDOL <gauthier.verdol@atm-consulting.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
|
||||
@ -575,7 +576,7 @@ $listofreferent = array(
|
||||
'class'=>'Task',
|
||||
'margin'=>'minus',
|
||||
'table'=>'projet_task',
|
||||
'datefieldname'=>'task_date',
|
||||
'datefieldname'=>'element_date',
|
||||
'disableamount'=>0,
|
||||
'urlnew'=>DOL_URL_ROOT.'/projet/tasks/time.php?withproject=1&action=createtime&projectid='.$id.'&backtopage='.urlencode($_SERVER['PHP_SELF'].'?id='.$id),
|
||||
'buttonnew'=>'AddTimeSpent',
|
||||
@ -1337,7 +1338,7 @@ foreach ($listofreferent as $key => $value) {
|
||||
$tmpuser2->fetch($element->fk_user_author);
|
||||
print $tmpuser2->getNomUrl(1, '', 48);
|
||||
}
|
||||
} elseif ($tablename == 'projet_task' && $key == 'project_task_time') { // if $key == 'project_task', we don't want details per user
|
||||
} elseif ($tablename == 'projet_task' && $key == 'element_time') { // if $key == 'project_task', we don't want details per user
|
||||
print $elementuser->getNomUrl(1);
|
||||
}
|
||||
print '</td>';
|
||||
|
||||
@ -192,6 +192,8 @@ foreach ($object->fields as $key => $val) {
|
||||
|
||||
// Add name object fields to "search in all"
|
||||
$fieldstosearchall['s.nom'] = "ThirdPartyName";
|
||||
$fieldstosearchall['s.name_alias'] = "AliasNameShort";
|
||||
$fieldstosearchall['s.code_client'] = "CustomerCode";
|
||||
|
||||
// Definition of array of fields for columns
|
||||
$arrayfields = array();
|
||||
|
||||
@ -1111,11 +1111,11 @@ if ($action == 'create' && $user->rights->projet->creer && (empty($object->third
|
||||
$j = 0; $level = 0;
|
||||
$nboftaskshown = projectLinesa($j, 0, $tasksarray, $level, true, 0, $tasksrole, $object->id, 1, $object->id, $filterprogresscalc, ($object->usage_bill_time ? 1 : 0), $arrayfields, $arrayofselected);
|
||||
} else {
|
||||
$colspan = 10;
|
||||
$colspan = 11;
|
||||
if ($object->usage_bill_time) {
|
||||
$colspan += 2;
|
||||
}
|
||||
print '<tr class="oddeven nobottom"><td colspan="'.$colspan.'"><span class="opacitymedium">'.$langs->trans("NoTasks").'</span></td></tr>';
|
||||
print '<tr class="oddeven"><td colspan="'.$colspan.'"><span class="opacitymedium">'.$langs->trans("NoTasks").'</span></td></tr>';
|
||||
}
|
||||
|
||||
print "</table>";
|
||||
|
||||
@ -4,6 +4,7 @@
|
||||
* Copyright (C) 2006-2010 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2018 Ferran Marcet <fmarcet@2byte.es>
|
||||
* Copyright (C) 2021 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||
* Copyright (C) 2023 Gauthier VERDOL <gauthier.verdol@atm-consulting.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
|
||||
@ -345,7 +346,7 @@ $sql .= " t.description, t.fk_task_parent";
|
||||
$sql .= " ,t.budget_amount";
|
||||
// Add sum fields
|
||||
if (!empty($arrayfields['t.tobill']['checked']) || !empty($arrayfields['t.billed']['checked'])) {
|
||||
$sql .= " , SUM(tt.task_duration * ".$db->ifsql("invoice_id IS NULL", "1", "0").") as tobill, SUM(tt.task_duration * ".$db->ifsql("invoice_id IS NULL", "0", "1").") as billed";
|
||||
$sql .= " , SUM(tt.element_duration * ".$db->ifsql("invoice_id IS NULL", "1", "0").") as tobill, SUM(tt.element_duration * ".$db->ifsql("invoice_id IS NULL", "0", "1").") as billed";
|
||||
}
|
||||
// Add fields from extrafields
|
||||
if (!empty($extrafields->attributes[$object->table_element]['label'])) {
|
||||
@ -361,7 +362,7 @@ $sql .= " FROM ".MAIN_DB_PREFIX."projet as p";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s on p.fk_soc = s.rowid";
|
||||
$sql .= ", ".MAIN_DB_PREFIX."projet_task as t";
|
||||
if (!empty($arrayfields['t.tobill']['checked']) || !empty($arrayfields['t.billed']['checked'])) {
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."projet_task_time as tt ON tt.fk_task = t.rowid";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."element_time as tt ON (tt.fk_element = t.rowid AND tt.elementtype = 'task')";
|
||||
}
|
||||
if (isset($extrafields->attributes[$object->table_element]['label']) && is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) {
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (t.rowid = ef.fk_object)";
|
||||
|
||||
@ -6,6 +6,7 @@
|
||||
* Copyright (C) 2018 Ferran Marcet <fmarcet@2byte.es>
|
||||
* Copyright (C) 2018 Frédéric France <frederic.france@netlogic.fr>
|
||||
* Copyright (C) 2019-2021 Christophe Battarel <christophe@altairis.fr>
|
||||
* Copyright (C) 2023 Gauthier VERDOL <gauthier.verdol@atm-consulting.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
|
||||
@ -104,7 +105,7 @@ $offset = $limit * $page;
|
||||
$pageprev = $page - 1;
|
||||
$pagenext = $page + 1;
|
||||
if (!$sortfield) {
|
||||
$sortfield = 't.task_date,t.task_datehour,t.rowid';
|
||||
$sortfield = 't.element_date,t.element_datehour,t.rowid';
|
||||
}
|
||||
if (!$sortorder) {
|
||||
$sortorder = 'DESC,DESC,DESC';
|
||||
@ -565,7 +566,7 @@ if ($action == 'confirm_generateinvoice') {
|
||||
}
|
||||
|
||||
// Update lineid into line of timespent
|
||||
$sql = 'UPDATE '.MAIN_DB_PREFIX.'projet_task_time SET invoice_line_id = '.((int) $lineid).', invoice_id = '.((int) $tmpinvoice->id);
|
||||
$sql = 'UPDATE '.MAIN_DB_PREFIX.'element_time SET invoice_line_id = '.((int) $lineid).', invoice_id = '.((int) $tmpinvoice->id);
|
||||
$sql .= ' WHERE rowid IN ('.$db->sanitize(join(',', $toselect)).') AND fk_user = '.((int) $userid);
|
||||
$result = $db->query($sql);
|
||||
if (!$result) {
|
||||
@ -669,7 +670,7 @@ if ($action == 'confirm_generateinvoice') {
|
||||
//var_dump($lineid);exit;
|
||||
|
||||
// Update lineid into line of timespent
|
||||
$sql = 'UPDATE '.MAIN_DB_PREFIX.'projet_task_time SET invoice_line_id = '.((int) $lineid).', invoice_id = '.((int) $tmpinvoice->id);
|
||||
$sql = 'UPDATE '.MAIN_DB_PREFIX.'element_time SET invoice_line_id = '.((int) $lineid).', invoice_id = '.((int) $tmpinvoice->id);
|
||||
$sql .= ' WHERE rowid IN ('.$db->sanitize(join(',', $toselect)).') AND fk_user = '.((int) $userid);
|
||||
$result = $db->query($sql);
|
||||
if (!$result) {
|
||||
@ -768,7 +769,7 @@ if ($action == 'confirm_generateinvoice') {
|
||||
|
||||
if (!$error) {
|
||||
// Update lineid into line of timespent
|
||||
$sql = 'UPDATE ' . MAIN_DB_PREFIX . 'projet_task_time SET invoice_line_id = ' . ((int) $lineid) . ', invoice_id = ' . ((int) $tmpinvoice->id);
|
||||
$sql = 'UPDATE ' . MAIN_DB_PREFIX . 'element_time SET invoice_line_id = ' . ((int) $lineid) . ', invoice_id = ' . ((int) $tmpinvoice->id);
|
||||
$sql .= ' WHERE rowid IN (' . $db->sanitize(join(',', $toselect)) . ')';
|
||||
$result = $db->query($sql);
|
||||
if (!$result) {
|
||||
@ -1266,7 +1267,7 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
|
||||
// Definition of fields for list
|
||||
$arrayfields = array();
|
||||
$arrayfields['t.task_date'] = array('label'=>$langs->trans("Date"), 'checked'=>1);
|
||||
$arrayfields['t.element_date'] = array('label'=>$langs->trans("Date"), 'checked'=>1);
|
||||
$arrayfields['p.fk_soc'] = array('label'=>$langs->trans("ThirdParty"), 'type'=>'integer:Societe:/societe/class/societe.class.php:1','checked'=>1);
|
||||
$arrayfields['s.name_alias'] = array('label'=>$langs->trans("AliasNameShort"), 'type'=>'integer:Societe:/societe/class/societe.class.php:1');
|
||||
if ((empty($id) && empty($ref)) || !empty($projectidforalltimes)) { // Not a dedicated task
|
||||
@ -1274,15 +1275,15 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
$arrayfields['p.project_ref'] = ['label' => $langs->trans('RefProject'), 'checked' => 1];
|
||||
$arrayfields['p.project_label'] = ['label' => $langs->trans('ProjectLabel'), 'checked' => 1];
|
||||
}
|
||||
$arrayfields['t.task_ref'] = array('label'=>$langs->trans("RefTask"), 'checked'=>1);
|
||||
$arrayfields['t.task_label'] = array('label'=>$langs->trans("LabelTask"), 'checked'=>1);
|
||||
$arrayfields['t.element_ref'] = array('label'=>$langs->trans("RefTask"), 'checked'=>1);
|
||||
$arrayfields['t.element_label'] = array('label'=>$langs->trans("LabelTask"), 'checked'=>1);
|
||||
}
|
||||
$arrayfields['author'] = array('label'=>$langs->trans("By"), 'checked'=>1);
|
||||
$arrayfields['t.note'] = array('label'=>$langs->trans("Note"), 'checked'=>1);
|
||||
if (isModEnabled('service') && !empty($projectstatic->thirdparty) && $projectstatic->thirdparty->id > 0 && $projectstatic->usage_bill_time) {
|
||||
$arrayfields['t.fk_product'] = array('label' => $langs->trans("Product"), 'checked' => 1);
|
||||
}
|
||||
$arrayfields['t.task_duration'] = array('label'=>$langs->trans("Duration"), 'checked'=>1);
|
||||
$arrayfields['t.element_duration'] = array('label'=>$langs->trans("Duration"), 'checked'=>1);
|
||||
$arrayfields['value'] = array('label'=>$langs->trans("Value"), 'checked'=>1, 'enabled'=>(empty($conf->salaries->enabled) ? 0 : 1));
|
||||
$arrayfields['valuebilled'] = array('label'=>$langs->trans("Billed"), 'checked'=>1, 'enabled'=>(((!empty($conf->global->PROJECT_HIDE_TASKS) || empty($conf->global->PROJECT_BILL_TIME_SPENT)) ? 0 : 1) && $projectstatic->usage_bill_time));
|
||||
// Extra fields
|
||||
@ -1551,7 +1552,7 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
$varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage;
|
||||
$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); // This also change content of $arrayfields
|
||||
|
||||
$sql = "SELECT t.rowid, t.fk_task, t.task_date, t.task_datehour, t.task_date_withhour, t.task_duration, t.fk_user, t.note, t.thm,";
|
||||
$sql = "SELECT t.rowid, t.fk_element, t.element_date, t.element_datehour, t.element_date_withhour, t.element_duration, t.fk_user, t.note, t.thm,";
|
||||
$sql .= " t.fk_product,";
|
||||
$sql .= " pt.ref, pt.label, pt.fk_projet,";
|
||||
$sql .= " u.lastname, u.firstname, u.login, u.photo, u.statut as user_status,";
|
||||
@ -1563,11 +1564,11 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
$reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters, $object); // Note that $action and $object may have been modified by hook
|
||||
$sql .= preg_replace('/^,/', '', $hookmanager->resPrint);
|
||||
$sql = preg_replace('/,\s*$/', '', $sql);
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."projet_task_time as t";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."element_time as t";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."facturedet as il ON il.rowid = t.invoice_line_id";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."facture as inv ON inv.rowid = il.fk_facture";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."product as prod ON prod.rowid = t.fk_product";
|
||||
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."projet_task as pt ON pt.rowid = t.fk_task";
|
||||
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."projet_task as pt ON pt.rowid = t.fk_element";
|
||||
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."projet as p ON p.rowid = pt.fk_projet";
|
||||
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."user as u ON t.fk_user = u.rowid";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid = p.fk_soc";
|
||||
@ -1576,10 +1577,10 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
$parameters = array();
|
||||
$reshook = $hookmanager->executeHooks('printFieldListFrom', $parameters, $object); // Note that $action and $object may have been modified by hook
|
||||
$sql .= $hookmanager->resPrint;
|
||||
$sql .= " WHERE 1 = 1 ";
|
||||
$sql .= " WHERE elementtype='task' ";
|
||||
if (empty($projectidforalltimes) && empty($allprojectforuser)) {
|
||||
// Limit on one task
|
||||
$sql .= " AND t.fk_task =".((int) $object->id);
|
||||
$sql .= " AND t.fk_element =".((int) $object->id);
|
||||
} elseif (!empty($projectidforalltimes)) {
|
||||
// Limit on one project
|
||||
$sql .= " AND pt.fk_projet IN (".$db->sanitize($projectidforalltimes).")";
|
||||
@ -1630,27 +1631,27 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
}
|
||||
|
||||
if ($search_date_start) {
|
||||
$sql .= " AND t.task_date >= '".$db->idate($search_date_start)."'";
|
||||
$sql .= " AND t.element_date >= '".$db->idate($search_date_start)."'";
|
||||
}
|
||||
if ($search_date_end) {
|
||||
$sql .= " AND t.task_date <= '".$db->idate($search_date_end)."'";
|
||||
$sql .= " AND t.element_date <= '".$db->idate($search_date_end)."'";
|
||||
}
|
||||
|
||||
if (!empty($arrayfields['t.task_duration']['checked'])) {
|
||||
if (!empty($arrayfields['t.element_duration']['checked'])) {
|
||||
if ($search_timespent_starthour || $search_timespent_startmin) {
|
||||
$timespent_duration_start = $search_timespent_starthour * 60 * 60; // We store duration in seconds
|
||||
$timespent_duration_start += ($search_timespent_startmin ? $search_timespent_startmin : 0) * 60; // We store duration in seconds
|
||||
$sql .= " AND t.task_duration >= " . $timespent_duration_start;
|
||||
$sql .= " AND t.element_duration >= " . $timespent_duration_start;
|
||||
}
|
||||
|
||||
if ($search_timespent_endhour || $search_timespent_endmin) {
|
||||
$timespent_duration_end = $search_timespent_endhour * 60 * 60; // We store duration in seconds
|
||||
$timespent_duration_end += ($search_timespent_endmin ? $search_timespent_endmin : 0) * 60; // We store duration in seconds
|
||||
$sql .= " AND t.task_duration <= " . $timespent_duration_end;
|
||||
$sql .= " AND t.element_duration <= " . $timespent_duration_end;
|
||||
}
|
||||
}
|
||||
|
||||
$sql .= dolSqlDateFilter('t.task_datehour', $search_day, $search_month, $search_year);
|
||||
$sql .= dolSqlDateFilter('t.element_datehour', $search_day, $search_month, $search_year);
|
||||
|
||||
// Add where from hooks
|
||||
$parameters = array();
|
||||
@ -1878,7 +1879,7 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
print '</td>';
|
||||
}
|
||||
// Date
|
||||
if (!empty($arrayfields['t.task_date']['checked'])) {
|
||||
if (!empty($arrayfields['t.element_date']['checked'])) {
|
||||
print '<td class="liste_titre left">';
|
||||
print '<div class="nowrap">';
|
||||
print $form->selectDate($search_date_start ? $search_date_start : -1, 'search_date_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From'));
|
||||
@ -1908,10 +1909,10 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
}
|
||||
// Task
|
||||
if ((empty($id) && empty($ref)) || !empty($projectidforalltimes)) { // Not a dedicated task
|
||||
if (!empty($arrayfields['t.task_ref']['checked'])) {
|
||||
if (!empty($arrayfields['t.element_ref']['checked'])) {
|
||||
print '<td class="liste_titre"><input type="text" class="flat maxwidth100" name="search_task_ref" value="'.dol_escape_htmltag($search_task_ref).'"></td>';
|
||||
}
|
||||
if (!empty($arrayfields['t.task_label']['checked'])) {
|
||||
if (!empty($arrayfields['t.element_label']['checked'])) {
|
||||
print '<td class="liste_titre"><input type="text" class="flat maxwidth100" name="search_task_label" value="'.dol_escape_htmltag($search_task_label).'"></td>';
|
||||
}
|
||||
}
|
||||
@ -1924,7 +1925,7 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
print '<td class="liste_titre"><input type="text" class="flat maxwidth100" name="search_note" value="'.dol_escape_htmltag($search_note).'"></td>';
|
||||
}
|
||||
// Duration
|
||||
if (!empty($arrayfields['t.task_duration']['checked'])) {
|
||||
if (!empty($arrayfields['t.element_duration']['checked'])) {
|
||||
// Duration - Time spent
|
||||
print '<td class="liste_titre right">';
|
||||
|
||||
@ -1980,12 +1981,12 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
|
||||
print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', 'width="80"', $sortfield, $sortorder, 'center maxwidthsearch ');
|
||||
}
|
||||
if (!empty($arrayfields['t.task_date']['checked'])) {
|
||||
print_liste_field_titre($arrayfields['t.task_date']['label'], $_SERVER['PHP_SELF'], 't.task_date,t.task_datehour,t.rowid', '', $param, '', $sortfield, $sortorder);
|
||||
if (!empty($arrayfields['t.element_date']['checked'])) {
|
||||
print_liste_field_titre($arrayfields['t.element_date']['label'], $_SERVER['PHP_SELF'], 't.element_date,t.element_datehour,t.rowid', '', $param, '', $sortfield, $sortorder);
|
||||
}
|
||||
|
||||
if (!empty($arrayfields['p.fk_soc']['checked'])) {
|
||||
print_liste_field_titre($arrayfields['p.fk_soc']['label'], $_SERVER['PHP_SELF'], 't.task_date,t.task_datehour,t.rowid', '', $param, '', $sortfield, $sortorder);
|
||||
print_liste_field_titre($arrayfields['p.fk_soc']['label'], $_SERVER['PHP_SELF'], 't.element_date,t.element_datehour,t.rowid', '', $param, '', $sortfield, $sortorder);
|
||||
}
|
||||
if (!empty($arrayfields['s.name_alias']['checked'])) {
|
||||
print_liste_field_titre($arrayfields['s.name_alias']['label'], $_SERVER['PHP_SELF'], 's.name_alias', '', $param, '', $sortfield, $sortorder);
|
||||
@ -1999,11 +2000,11 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
}
|
||||
}
|
||||
if ((empty($id) && empty($ref)) || !empty($projectidforalltimes)) { // Not a dedicated task
|
||||
if (!empty($arrayfields['t.task_ref']['checked'])) {
|
||||
print_liste_field_titre($arrayfields['t.task_ref']['label'], $_SERVER['PHP_SELF'], 'pt.ref', '', $param, '', $sortfield, $sortorder);
|
||||
if (!empty($arrayfields['t.element_ref']['checked'])) {
|
||||
print_liste_field_titre($arrayfields['t.element_ref']['label'], $_SERVER['PHP_SELF'], 'pt.ref', '', $param, '', $sortfield, $sortorder);
|
||||
}
|
||||
if (!empty($arrayfields['t.task_label']['checked'])) {
|
||||
print_liste_field_titre($arrayfields['t.task_label']['label'], $_SERVER['PHP_SELF'], 'pt.label', '', $param, '', $sortfield, $sortorder);
|
||||
if (!empty($arrayfields['t.element_label']['checked'])) {
|
||||
print_liste_field_titre($arrayfields['t.element_label']['label'], $_SERVER['PHP_SELF'], 'pt.label', '', $param, '', $sortfield, $sortorder);
|
||||
}
|
||||
}
|
||||
if (!empty($arrayfields['author']['checked'])) {
|
||||
@ -2012,8 +2013,8 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
if (!empty($arrayfields['t.note']['checked'])) {
|
||||
print_liste_field_titre($arrayfields['t.note']['label'], $_SERVER['PHP_SELF'], 't.note', '', $param, '', $sortfield, $sortorder);
|
||||
}
|
||||
if (!empty($arrayfields['t.task_duration']['checked'])) {
|
||||
print_liste_field_titre($arrayfields['t.task_duration']['label'], $_SERVER['PHP_SELF'], 't.task_duration', '', $param, '', $sortfield, $sortorder, 'right ');
|
||||
if (!empty($arrayfields['t.element_duration']['checked'])) {
|
||||
print_liste_field_titre($arrayfields['t.element_duration']['label'], $_SERVER['PHP_SELF'], 't.element_duration', '', $param, '', $sortfield, $sortorder, 'right ');
|
||||
}
|
||||
if (!empty($arrayfields['t.fk_product']['checked'])) {
|
||||
print_liste_field_titre($arrayfields['t.fk_product']['label'], $_SERVER['PHP_SELF'], 't.fk_product', '', $param, '', $sortfield, $sortorder);
|
||||
@ -2051,8 +2052,8 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
break;
|
||||
}
|
||||
|
||||
$date1 = $db->jdate($task_time->task_date);
|
||||
$date2 = $db->jdate($task_time->task_datehour);
|
||||
$date1 = $db->jdate($task_time->element_date);
|
||||
$date2 = $db->jdate($task_time->element_datehour);
|
||||
|
||||
print '<tr class="oddeven">';
|
||||
|
||||
@ -2073,11 +2074,11 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
print '</a>';
|
||||
}
|
||||
|
||||
print '<a class="reposition editfielda" href="'.$_SERVER["PHP_SELF"].'?id='.$task_time->fk_task.'&action=editline&token='.newToken().'&lineid='.$task_time->rowid.$param.((empty($id) || $tab == 'timespent') ? '&tab=timespent' : '').'">';
|
||||
print '<a class="reposition editfielda" href="'.$_SERVER["PHP_SELF"].'?id='.$task_time->fk_element.'&action=editline&token='.newToken().'&lineid='.$task_time->rowid.$param.((empty($id) || $tab == 'timespent') ? '&tab=timespent' : '').'">';
|
||||
print img_edit('default', 0, 'class="pictofixedwidth paddingleft"');
|
||||
print '</a>';
|
||||
|
||||
print '<a class="reposition paddingleft" href="'.$_SERVER["PHP_SELF"].'?id='.$task_time->fk_task.'&action=deleteline&token='.newToken().'&lineid='.$task_time->rowid.$param.((empty($id) || $tab == 'timespent') ? '&tab=timespent' : '').'">';
|
||||
print '<a class="reposition paddingleft" href="'.$_SERVER["PHP_SELF"].'?id='.$task_time->fk_element.'&action=deleteline&token='.newToken().'&lineid='.$task_time->rowid.$param.((empty($id) || $tab == 'timespent') ? '&tab=timespent' : '').'">';
|
||||
print img_delete('default', 'class="pictodelete paddingleft"');
|
||||
print '</a>';
|
||||
|
||||
@ -2093,16 +2094,16 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
}
|
||||
}
|
||||
// Date
|
||||
if (!empty($arrayfields['t.task_date']['checked'])) {
|
||||
if (!empty($arrayfields['t.element_date']['checked'])) {
|
||||
print '<td class="nowrap">';
|
||||
if ($action == 'editline' && GETPOST('lineid', 'int') == $task_time->rowid) {
|
||||
if (empty($task_time->task_date_withhour)) {
|
||||
if (empty($task_time->element_date_withhour)) {
|
||||
print $form->selectDate(($date2 ? $date2 : $date1), 'timeline', 3, 3, 2, "timespent_date", 1, 0);
|
||||
} else {
|
||||
print $form->selectDate(($date2 ? $date2 : $date1), 'timeline', 1, 1, 2, "timespent_date", 1, 0);
|
||||
}
|
||||
} else {
|
||||
print dol_print_date(($date2 ? $date2 : $date1), ($task_time->task_date_withhour ? 'dayhour' : 'day'));
|
||||
print dol_print_date(($date2 ? $date2 : $date1), ($task_time->element_date_withhour ? 'dayhour' : 'day'));
|
||||
}
|
||||
print '</td>';
|
||||
if (!$i) {
|
||||
@ -2183,13 +2184,13 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
}
|
||||
|
||||
// Task ref
|
||||
if (!empty($arrayfields['t.task_ref']['checked'])) {
|
||||
if (!empty($arrayfields['t.element_ref']['checked'])) {
|
||||
if ((empty($id) && empty($ref)) || !empty($projectidforalltimes)) { // Not a dedicated task
|
||||
print '<td class="nowrap">';
|
||||
if ($action == 'editline' && GETPOST('lineid', 'int') == $task_time->rowid) {
|
||||
$formproject->selectTasks(-1, GETPOST('taskid', 'int') ? GETPOST('taskid', 'int') : $task_time->fk_task, 'taskid', 0, 0, 1, 1, 0, 0, 'maxwidth300', $projectstatic->id, '');
|
||||
$formproject->selectTasks(-1, GETPOST('taskid', 'int') ? GETPOST('taskid', 'int') : $task_time->fk_element, 'taskid', 0, 0, 1, 1, 0, 0, 'maxwidth300', $projectstatic->id, '');
|
||||
} else {
|
||||
$tasktmp->id = $task_time->fk_task;
|
||||
$tasktmp->id = $task_time->fk_element;
|
||||
$tasktmp->ref = $task_time->ref;
|
||||
$tasktmp->label = $task_time->label;
|
||||
print $tasktmp->getNomUrl(1, 'withproject', 'time');
|
||||
@ -2204,7 +2205,7 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
}
|
||||
|
||||
// Task label
|
||||
if (!empty($arrayfields['t.task_label']['checked'])) {
|
||||
if (!empty($arrayfields['t.element_label']['checked'])) {
|
||||
if ((empty($id) && empty($ref)) || !empty($projectidforalltimes)) { // Not a dedicated task
|
||||
print '<td class="nowrap tdoverflowmax300" title="'.dol_escape_htmltag($task_time->label).'">';
|
||||
print dol_escape_htmltag($task_time->label);
|
||||
@ -2263,33 +2264,33 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
}
|
||||
|
||||
// Time spent
|
||||
if (!empty($arrayfields['t.task_duration']['checked'])) {
|
||||
if (!empty($arrayfields['t.element_duration']['checked'])) {
|
||||
print '<td class="right nowraponall">';
|
||||
if ($action == 'editline' && GETPOST('lineid', 'int') == $task_time->rowid) {
|
||||
print '<input type="hidden" name="old_duration" value="'.$task_time->task_duration.'">';
|
||||
print $form->select_duration('new_duration', $task_time->task_duration, 0, 'text');
|
||||
print '<input type="hidden" name="old_duration" value="'.$task_time->element_duration.'">';
|
||||
print $form->select_duration('new_duration', $task_time->element_duration, 0, 'text');
|
||||
} else {
|
||||
print convertSecondToTime($task_time->task_duration, 'allhourmin');
|
||||
print convertSecondToTime($task_time->element_duration, 'allhourmin');
|
||||
}
|
||||
print '</td>';
|
||||
if (!$i) {
|
||||
$totalarray['nbfield']++;
|
||||
}
|
||||
if (!$i) {
|
||||
$totalarray['pos'][$totalarray['nbfield']] = 't.task_duration';
|
||||
$totalarray['pos'][$totalarray['nbfield']] = 't.element_duration';
|
||||
}
|
||||
if (empty($totalarray['val']['t.task_duration'])) {
|
||||
$totalarray['val']['t.task_duration'] = $task_time->task_duration;
|
||||
if (empty($totalarray['val']['t.element_duration'])) {
|
||||
$totalarray['val']['t.element_duration'] = $task_time->element_duration;
|
||||
} else {
|
||||
$totalarray['val']['t.task_duration'] += $task_time->task_duration;
|
||||
$totalarray['val']['t.element_duration'] += $task_time->element_duration;
|
||||
}
|
||||
if (!$i) {
|
||||
$totalarray['totaldurationfield'] = $totalarray['nbfield'];
|
||||
}
|
||||
if (empty($totalarray['totalduration'])) {
|
||||
$totalarray['totalduration'] = $task_time->task_duration;
|
||||
$totalarray['totalduration'] = $task_time->element_duration;
|
||||
} else {
|
||||
$totalarray['totalduration'] += $task_time->task_duration;
|
||||
$totalarray['totalduration'] += $task_time->element_duration;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2313,7 +2314,7 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
// Value spent
|
||||
if (!empty($arrayfields['value']['checked'])) {
|
||||
$langs->load("salaries");
|
||||
$value = price2num($task_time->thm * $task_time->task_duration / 3600, 'MT', 1);
|
||||
$value = price2num($task_time->thm * $task_time->element_duration / 3600, 'MT', 1);
|
||||
|
||||
print '<td class="nowraponall right">';
|
||||
print '<span class="amount" title="'.$langs->trans("THM").': '.price($task_time->thm).'">';
|
||||
@ -2403,11 +2404,11 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
print '</a>';
|
||||
}
|
||||
|
||||
print '<a class="reposition editfielda" href="'.$_SERVER["PHP_SELF"].'?id='.$task_time->fk_task.'&action=editline&token='.newToken().'&lineid='.$task_time->rowid.$param.((empty($id) || $tab == 'timespent') ? '&tab=timespent' : '').'">';
|
||||
print '<a class="reposition editfielda" href="'.$_SERVER["PHP_SELF"].'?id='.$task_time->fk_element.'&action=editline&token='.newToken().'&lineid='.$task_time->rowid.$param.((empty($id) || $tab == 'timespent') ? '&tab=timespent' : '').'">';
|
||||
print img_edit('default', 0, 'class="pictofixedwidth paddingleft"');
|
||||
print '</a>';
|
||||
|
||||
print '<a class="reposition paddingleft" href="'.$_SERVER["PHP_SELF"].'?id='.$task_time->fk_task.'&action=deleteline&token='.newToken().'&lineid='.$task_time->rowid.$param.((empty($id) || $tab == 'timespent') ? '&tab=timespent' : '').'">';
|
||||
print '<a class="reposition paddingleft" href="'.$_SERVER["PHP_SELF"].'?id='.$task_time->fk_element.'&action=deleteline&token='.newToken().'&lineid='.$task_time->rowid.$param.((empty($id) || $tab == 'timespent') ? '&tab=timespent' : '').'">';
|
||||
print img_delete('default', 'class="pictodelete paddingleft"');
|
||||
print '</a>';
|
||||
|
||||
@ -2436,16 +2437,16 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
print '<tr class="oddeven">';
|
||||
|
||||
// Date
|
||||
if (!empty($arrayfields['t.task_date']['checked'])) {
|
||||
if (!empty($arrayfields['t.element_date']['checked'])) {
|
||||
print '<td class="nowrap">';
|
||||
if ($action == 'splitline' && GETPOST('lineid', 'int') == $task_time->rowid) {
|
||||
if (empty($task_time->task_date_withhour)) {
|
||||
if (empty($task_time->element_date_withhour)) {
|
||||
print $form->selectDate(($date2 ? $date2 : $date1), 'timeline', 3, 3, 2, "timespent_date", 1, 0);
|
||||
} else {
|
||||
print $form->selectDate(($date2 ? $date2 : $date1), 'timeline', 1, 1, 2, "timespent_date", 1, 0);
|
||||
}
|
||||
} else {
|
||||
print dol_print_date(($date2 ? $date2 : $date1), ($task_time->task_date_withhour ? 'dayhour' : 'day'));
|
||||
print dol_print_date(($date2 ? $date2 : $date1), ($task_time->element_date_withhour ? 'dayhour' : 'day'));
|
||||
}
|
||||
print '</td>';
|
||||
}
|
||||
@ -2459,10 +2460,10 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
}
|
||||
|
||||
// Task ref
|
||||
if (!empty($arrayfields['t.task_ref']['checked'])) {
|
||||
if (!empty($arrayfields['t.element_ref']['checked'])) {
|
||||
if ((empty($id) && empty($ref)) || !empty($projectidforalltimes)) { // Not a dedicated task
|
||||
print '<td class="nowrap">';
|
||||
$tasktmp->id = $task_time->fk_task;
|
||||
$tasktmp->id = $task_time->fk_element;
|
||||
$tasktmp->ref = $task_time->ref;
|
||||
$tasktmp->label = $task_time->label;
|
||||
print $tasktmp->getNomUrl(1, 'withproject', 'time');
|
||||
@ -2471,7 +2472,7 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
}
|
||||
|
||||
// Task label
|
||||
if (!empty($arrayfields['t.task_label']['checked'])) {
|
||||
if (!empty($arrayfields['t.element_label']['checked'])) {
|
||||
if ((empty($id) && empty($ref)) || !empty($projectidforalltimes)) { // Not a dedicated task
|
||||
print '<td class="tdoverflowmax300" title="'.dol_escape_htmltag($task_time->label).'">';
|
||||
print dol_escape_htmltag($task_time->label);
|
||||
@ -2521,13 +2522,13 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
}
|
||||
|
||||
// Time spent
|
||||
if (!empty($arrayfields['t.task_duration']['checked'])) {
|
||||
if (!empty($arrayfields['t.element_duration']['checked'])) {
|
||||
print '<td class="right">';
|
||||
if ($action == 'splitline' && GETPOST('lineid', 'int') == $task_time->rowid) {
|
||||
print '<input type="hidden" name="old_duration" value="'.$task_time->task_duration.'">';
|
||||
print $form->select_duration('new_duration', $task_time->task_duration, 0, 'text');
|
||||
print '<input type="hidden" name="old_duration" value="'.$task_time->element_duration.'">';
|
||||
print $form->select_duration('new_duration', $task_time->element_duration, 0, 'text');
|
||||
} else {
|
||||
print convertSecondToTime($task_time->task_duration, 'allhourmin');
|
||||
print convertSecondToTime($task_time->element_duration, 'allhourmin');
|
||||
}
|
||||
print '</td>';
|
||||
}
|
||||
@ -2536,7 +2537,7 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
if (!empty($arrayfields['value']['checked'])) {
|
||||
print '<td class="right">';
|
||||
print '<span class="amount">';
|
||||
$value = price2num($task_time->thm * $task_time->task_duration / 3600, 'MT', 1);
|
||||
$value = price2num($task_time->thm * $task_time->element_duration / 3600, 'MT', 1);
|
||||
print price($value, 1, $langs, 1, -1, -1, $conf->currency);
|
||||
print '</span>';
|
||||
print '</td>';
|
||||
@ -2574,16 +2575,16 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
print '<tr class="oddeven">';
|
||||
|
||||
// Date
|
||||
if (!empty($arrayfields['t.task_date']['checked'])) {
|
||||
if (!empty($arrayfields['t.element_date']['checked'])) {
|
||||
print '<td class="nowrap">';
|
||||
if ($action == 'splitline' && GETPOST('lineid', 'int') == $task_time->rowid) {
|
||||
if (empty($task_time->task_date_withhour)) {
|
||||
if (empty($task_time->element_date_withhour)) {
|
||||
print $form->selectDate(($date2 ? $date2 : $date1), 'timeline_2', 3, 3, 2, "timespent_date", 1, 0);
|
||||
} else {
|
||||
print $form->selectDate(($date2 ? $date2 : $date1), 'timeline_2', 1, 1, 2, "timespent_date", 1, 0);
|
||||
}
|
||||
} else {
|
||||
print dol_print_date(($date2 ? $date2 : $date1), ($task_time->task_date_withhour ? 'dayhour' : 'day'));
|
||||
print dol_print_date(($date2 ? $date2 : $date1), ($task_time->element_date_withhour ? 'dayhour' : 'day'));
|
||||
}
|
||||
print '</td>';
|
||||
}
|
||||
@ -2597,10 +2598,10 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
}
|
||||
|
||||
// Task ref
|
||||
if (!empty($arrayfields['t.task_ref']['checked'])) {
|
||||
if (!empty($arrayfields['t.element_ref']['checked'])) {
|
||||
if ((empty($id) && empty($ref)) || !empty($projectidforalltimes)) { // Not a dedicated task
|
||||
print '<td class="nowrap">';
|
||||
$tasktmp->id = $task_time->fk_task;
|
||||
$tasktmp->id = $task_time->fk_element;
|
||||
$tasktmp->ref = $task_time->ref;
|
||||
$tasktmp->label = $task_time->label;
|
||||
print $tasktmp->getNomUrl(1, 'withproject', 'time');
|
||||
@ -2609,7 +2610,7 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
}
|
||||
|
||||
// Task label
|
||||
if (!empty($arrayfields['t.task_label']['checked'])) {
|
||||
if (!empty($arrayfields['t.element_label']['checked'])) {
|
||||
if ((empty($id) && empty($ref)) || !empty($projectidforalltimes)) { // Not a dedicated task
|
||||
print '<td class="nowrap">';
|
||||
print $task_time->label;
|
||||
@ -2659,13 +2660,13 @@ if (($id > 0 || !empty($ref)) || $projectidforalltimes > 0 || $allprojectforuser
|
||||
}
|
||||
|
||||
// Time spent
|
||||
if (!empty($arrayfields['t.task_duration']['checked'])) {
|
||||
if (!empty($arrayfields['t.element_duration']['checked'])) {
|
||||
print '<td class="right">';
|
||||
if ($action == 'splitline' && GETPOST('lineid', 'int') == $task_time->rowid) {
|
||||
print '<input type="hidden" name="old_duration_2" value="0">';
|
||||
print $form->select_duration('new_duration_2', 0, 0, 'text');
|
||||
} else {
|
||||
print convertSecondToTime($task_time->task_duration, 'allhourmin');
|
||||
print convertSecondToTime($task_time->element_duration, 'allhourmin');
|
||||
}
|
||||
print '</td>';
|
||||
}
|
||||
|
||||
@ -512,7 +512,7 @@ $arrayofcss = array('/opensurvey/css/style.css', '/ticket/css/styles.css.php');
|
||||
llxHeaderTicket($langs->trans("CreateTicket"), "", 0, 0, $arrayofjs, $arrayofcss);
|
||||
|
||||
|
||||
print '<div class="ticketpublicarea">';
|
||||
print '<div class="ticketpublicarea ticketlargemargin centpercent">';
|
||||
|
||||
if ($action != "infos_success") {
|
||||
$formticket->withfromsocid = isset($socid) ? $socid : $user->socid;
|
||||
|
||||
@ -80,7 +80,7 @@ $arrayofcss = array('/ticket/css/styles.css.php');
|
||||
|
||||
llxHeaderTicket($langs->trans("Tickets"), "", 0, 0, $arrayofjs, $arrayofcss);
|
||||
|
||||
print '<div class="ticketpublicarea">';
|
||||
print '<div class="ticketpublicarea ticketlargemargin centpercent">';
|
||||
|
||||
print '<p style="text-align: center">'.(getDolGlobalString("TICKET_PUBLIC_TEXT_HOME", '<span class="opacitymedium">'.$langs->trans("TicketPublicDesc")).'</span></p>').'</p>';
|
||||
print '<br>';
|
||||
|
||||
@ -193,9 +193,8 @@ $arrayofcss = array('/ticket/css/styles.css.php');
|
||||
llxHeaderTicket($langs->trans("Tickets"), "", 0, 0, $arrayofjs, $arrayofcss);
|
||||
|
||||
|
||||
|
||||
if ($action == "view_ticketlist") {
|
||||
print '<div class="ticketpublicarealist">';
|
||||
print '<div class="ticketpublicarealist ticketlargemargin centpercent">';
|
||||
|
||||
print '<br>';
|
||||
if ($display_ticket_list) {
|
||||
@ -426,6 +425,7 @@ if ($action == "view_ticketlist") {
|
||||
$reshook=$hookmanager->executeHooks('printFieldListHeader', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||
print $hookmanager->resPrint;
|
||||
|
||||
print '<div class="div-table-responsive">';
|
||||
print '<table class="liste '.($moreforfilter ? "listwithfilterbefore" : "").'">';
|
||||
|
||||
// Filter bar
|
||||
@ -697,6 +697,8 @@ if ($action == "view_ticketlist") {
|
||||
}
|
||||
|
||||
print '</table>';
|
||||
print '</div>';
|
||||
|
||||
print '</form>';
|
||||
|
||||
print '<form method="post" id="form_view_ticket" name="form_view_ticket" action="'.dol_buildpath('/public/ticket/view.php', 1).(!empty($entity) && isModEnabled('multicompany')?'?entity='.$entity:'').'" style="display:none;">';
|
||||
@ -724,7 +726,7 @@ if ($action == "view_ticketlist") {
|
||||
|
||||
print '</div>';
|
||||
} else {
|
||||
print '<div class="ticketpublicarea">';
|
||||
print '<div class="ticketpublicarea ticketlargemargin centpercent">';
|
||||
|
||||
print '<p class="center opacitymedium">'.$langs->trans("TicketPublicMsgViewLogIn").'</p>';
|
||||
print '<br>';
|
||||
|
||||
@ -218,6 +218,9 @@ include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php';
|
||||
$form = new Form($db);
|
||||
$formticket = new FormTicket($db);
|
||||
|
||||
// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
|
||||
$hookmanager->initHooks(array('ticketpublicview', 'globalcard'));
|
||||
|
||||
if (!$conf->global->TICKET_ENABLE_PUBLIC_INTERFACE) {
|
||||
print '<div class="error">'.$langs->trans('TicketPublicInterfaceForbidden').'</div>';
|
||||
$db->close();
|
||||
@ -229,7 +232,7 @@ $arrayofcss = array('/ticket/css/styles.css.php');
|
||||
|
||||
llxHeaderTicket($langs->trans("Tickets"), "", 0, 0, $arrayofjs, $arrayofcss);
|
||||
|
||||
print '<div class="ticketpublicarea">';
|
||||
print '<div class="ticketpublicarea ticketlargemargin centpercent">';
|
||||
|
||||
if ($action == "view_ticket" || $action == "presend" || $action == "close" || $action == "confirm_public_close") {
|
||||
if ($display_ticket) {
|
||||
@ -332,6 +335,9 @@ if ($action == "view_ticket" || $action == "presend" || $action == "close" || $a
|
||||
print ($object->dao->progress > 0 ? dol_escape_htmltag($object->dao->progress) : '0').'%';
|
||||
print '</td></tr>';
|
||||
|
||||
// Other attributes
|
||||
include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php';
|
||||
|
||||
print '</table>';
|
||||
|
||||
print '</div>';
|
||||
@ -376,7 +382,7 @@ if ($action == "view_ticket" || $action == "presend" || $action == "close" || $a
|
||||
|
||||
// Close ticket
|
||||
if ($object->dao->fk_statut >= Ticket::STATUS_NOT_READ && $object->dao->fk_statut < Ticket::STATUS_CLOSED) {
|
||||
print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER['PHP_SELF'].'?action=close&track_id='.$object->dao->track_id.(!empty($entity) && isModEnabled('multicompany')?'&entity='.$entity:'').'">'.$langs->trans('CloseTicket').'</a></div>';
|
||||
print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER['PHP_SELF'].'?action=close&token='.newToken().'&track_id='.$object->dao->track_id.(!empty($entity) && isModEnabled('multicompany')?'&entity='.$entity:'').'">'.$langs->trans('CloseTicket').'</a></div>';
|
||||
}
|
||||
}
|
||||
|
||||
@ -390,10 +396,11 @@ if ($action == "view_ticket" || $action == "presend" || $action == "close" || $a
|
||||
print '<div class="error">Not Allowed<br><a href="'.$_SERVER['PHP_SELF'].'?track_id='.$object->dao->track_id.(!empty($entity) && isModEnabled('multicompany')?'?entity='.$entity:'').'" rel="nofollow noopener">'.$langs->trans('Back').'</a></div>';
|
||||
}
|
||||
} else {
|
||||
print '<div class="center opacitymedium margintoponly marginbottomonly">'.$langs->trans("TicketPublicMsgViewLogIn").'</div>';
|
||||
print '<div class="center opacitymedium margintoponly marginbottomonly ticketlargemargin">'.$langs->trans("TicketPublicMsgViewLogIn").'</div>';
|
||||
|
||||
print '<div id="form_view_ticket">';
|
||||
print '<form method="post" name="form_view_ticket" action="'.$_SERVER['PHP_SELF'].(!empty($entity) && isModEnabled('multicompany')?'?entity='.$entity:'').'">';
|
||||
|
||||
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||
print '<input type="hidden" name="action" value="view_ticket">';
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user