Merge branch 'develop' into boxindex
This commit is contained in:
commit
a79a4e876d
10
.github/CONTRIBUTING.md
vendored
10
.github/CONTRIBUTING.md
vendored
@ -4,15 +4,17 @@ How to contribute to Dolibarr
|
||||
Bug reports and feature requests
|
||||
--------------------------------
|
||||
|
||||
<a name="not-a-support-forum"></a>*Note*: Issues are not a support forum. If you need help using the software, please use [the forums](https://www.dolibarr.org/forum.php). Forums exist in different languages.
|
||||
<a name="not-a-support-forum"></a>*Note*: **GitHub Issues is not a support forum.** If you have questions about Dolibarr / need help using the software, please use [the forums](https://www.dolibarr.org/forum.php). Forums exist in different languages.
|
||||
|
||||
Issues are managed on [GitHub](https://github.com/Dolibarr/dolibarr/issues).
|
||||
Default language here is english. So please prepare your contributions in english.
|
||||
Default **language here is english**. So please prepare your contributions in english.
|
||||
|
||||
1. Please [use the search engine](https://help.github.com/articles/searching-issues) to check if nobody's already reported your problem.
|
||||
2. [Create an issue](https://help.github.com/articles/creating-an-issue). Choose an appropriate title. Prepend appropriately with Bug or Feature Request.
|
||||
4. Tell us the version you are using! (look at /htdocs/admin/system/dolibarr.php? and check if you are using the latest version)
|
||||
3. Write a report with as much detail as possible (Use [screenshots](https://help.github.com/articles/issue-attachments) or even screencasts and provide logging and debugging informations whenever possible).
|
||||
3. Tell us the version you are using! (look at /htdocs/admin/system/dolibarr.php? and check if you are using the latest version)
|
||||
4. Write a report with as much detail as possible (Use [screenshots](https://help.github.com/articles/issue-attachments) or even screencasts and provide logging and debugging informations whenever possible).
|
||||
5. Delete unnecessary submissions.
|
||||
6. **Check your Message at Preview before sending.**
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1,4 +1,10 @@
|
||||
#!/bin/sh
|
||||
# To install this precommit file: put this file in your local repo in .git/hooks directory and make it executable
|
||||
# you need to adapt the path to your phpcs install
|
||||
# if phpcs check fail, then it run phpcbf to fix automaticaly the syntax, and git commit is canceled
|
||||
# if you have a multiprocessor computer, you can add to the option --parallel=xx
|
||||
# when running git commit, it first execute this file checking only modified files, so it is faster than running on all files
|
||||
# To run the fix manually: cd ~/git/dolibarr; phpcbf -s -p -d memory_limit=-1 --extensions=php --colors --tab-width=4 --standard=dev/setup/codesniffer/ruleset.xml --encoding=utf-8 --runtime-set ignore_warnings_on_exit true fileordir
|
||||
|
||||
PROJECT=`php -r "echo dirname(dirname(dirname(realpath('$0'))));"`
|
||||
STAGED_FILES_CMD=`git diff --cached --name-only --diff-filter=ACMR HEAD | grep \\\\.php`
|
||||
|
||||
@ -118,9 +118,10 @@ if (empty($reshook)) {
|
||||
|
||||
$form = new Form($db);
|
||||
|
||||
$help_url = '';
|
||||
$title = $langs->trans('ChartOfIndividualAccountsOfSubsidiaryLedger');
|
||||
|
||||
llxHeader('', $title);
|
||||
llxHeader('', $title, $help_url);
|
||||
|
||||
// Customer
|
||||
$sql = "SELECT sa.rowid, sa.nom as label, sa.code_compta as subaccount, '1' as type, sa.entity";
|
||||
@ -314,7 +315,7 @@ if ($resql) {
|
||||
|
||||
print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords, 'title_accountancy', 0, '', '', $limit, 0, 0, 1);
|
||||
|
||||
print '<div class="warning">'.$langs->trans("WarningCreateSubAccounts").'</div>';
|
||||
print '<div class="info">'.$langs->trans("WarningCreateSubAccounts").'</div>';
|
||||
|
||||
$varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage;
|
||||
$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields
|
||||
|
||||
@ -10,6 +10,7 @@
|
||||
* Copyright (C) 2017-2020 Frédéric France <frederic.france@netlogic.fr>
|
||||
* Copyright (C) 2018 Ferran Marcet <fmarcet@2byte.es>
|
||||
* Copyright (C) 2018 Eric Seigne <eric.seigne@cap-rel.fr>
|
||||
* Copyright (C) 2021 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
|
||||
@ -945,7 +946,7 @@ if (empty($action) || $action == 'view') {
|
||||
$vatstatic = new Tva($db);
|
||||
$donationstatic = new Don($db);
|
||||
$loanstatic = new Loan($db);
|
||||
$salarystatic = new PaymentSalary($db);
|
||||
$salarystatic = new Salary($db);
|
||||
$variousstatic = new PaymentVarious($db);
|
||||
|
||||
llxHeader('', $langs->trans("FinanceJournal"));
|
||||
|
||||
@ -266,16 +266,16 @@ if ($result) {
|
||||
print '<input type="hidden" name="const['.$i.'][rowid]" value="'.$obj->rowid.'">';
|
||||
print '<input type="hidden" name="const['.$i.'][name]" value="'.$obj->name.'">';
|
||||
print '<input type="hidden" name="const['.$i.'][type]" value="'.$obj->type.'">';
|
||||
print '<input type="text" id="value_'.$i.'" class="flat inputforupdate" size="30" name="const['.$i.'][value]" value="'.htmlspecialchars($obj->value).'">';
|
||||
print '<input type="text" id="value_'.$i.'" class="flat inputforupdate minwidth150" name="const['.$i.'][value]" value="'.htmlspecialchars($obj->value).'">';
|
||||
print '</td>';
|
||||
|
||||
// Note
|
||||
print '<td>';
|
||||
print '<input type="text" id="note_'.$i.'" class="flat inputforupdate" size="40" name="const['.$i.'][note]" value="'.htmlspecialchars($obj->note, 1).'">';
|
||||
print '<input type="text" id="note_'.$i.'" class="flat inputforupdate minwidth200" name="const['.$i.'][note]" value="'.htmlspecialchars($obj->note, 1).'">';
|
||||
print '</td>';
|
||||
|
||||
// Date last change
|
||||
print '<td>';
|
||||
print '<td class="nowraponall">';
|
||||
print dol_print_date($db->jdate($obj->tms), 'dayhour');
|
||||
print '</td>';
|
||||
|
||||
|
||||
@ -57,7 +57,9 @@ if ($action == 'setvalue' && $user->admin) {
|
||||
if (!dolibarr_set_const($db, 'LDAP_GROUP_OBJECT_CLASS', GETPOST("objectclass", 'alphanohtml'), 'chaine', 0, '', $conf->entity)) {
|
||||
$error++;
|
||||
}
|
||||
|
||||
if (!dolibarr_set_const($db, 'LDAP_GROUP_FILTER', GETPOST("filter"), 'chaine', 0, '', $conf->entity)) {
|
||||
$error++;
|
||||
}
|
||||
if (!dolibarr_set_const($db, 'LDAP_GROUP_FIELD_FULLNAME', GETPOST("fieldfullname", 'alphanohtml'), 'chaine', 0, '', $conf->entity)) {
|
||||
$error++;
|
||||
}
|
||||
@ -141,6 +143,13 @@ print '</td><td>'.$langs->trans("LDAPGroupObjectClassListExample").'</td>';
|
||||
print '<td> </td>';
|
||||
print '</tr>';
|
||||
|
||||
// Filter, used to filter search
|
||||
print '<tr class="oddeven"><td>'.$langs->trans("LDAPFilterConnection").'</td><td>';
|
||||
print '<input size="48" type="text" name="filter" value="'.$conf->global->LDAP_GROUP_FILTER.'">';
|
||||
print '</td><td>'.$langs->trans("LDAPGroupFilterExample").'</td>';
|
||||
print '<td></td>';
|
||||
print '</tr>';
|
||||
|
||||
print '</table>';
|
||||
print '<br>';
|
||||
print '<table class="noborder centpercent">';
|
||||
@ -211,11 +220,18 @@ if ($conf->global->LDAP_SYNCHRO_ACTIVE == 'dolibarr2ldap') {
|
||||
$dn = $conf->global->LDAP_GROUP_DN;
|
||||
$objectclass = $conf->global->LDAP_GROUP_OBJECT_CLASS;
|
||||
|
||||
show_ldap_test_button($butlabel, $testlabel, $key, $dn, $objectclass);
|
||||
} elseif ($conf->global->LDAP_SYNCHRO_ACTIVE == 'ldap2dolibarr') {
|
||||
$butlabel = $langs->trans("LDAPTestSearch");
|
||||
$testlabel = 'testsearchgroup';
|
||||
$key = $conf->global->LDAP_KEY_GROUPS;
|
||||
$dn = $conf->global->LDAP_GROUP_DN;
|
||||
$objectclass = $conf->global->LDAP_GROUP_OBJECT_CLASS;
|
||||
show_ldap_test_button($butlabel, $testlabel, $key, $dn, $objectclass);
|
||||
}
|
||||
|
||||
if (function_exists("ldap_connect")) {
|
||||
if ($_GET["action"] == 'testgroup') {
|
||||
if ($action == 'testgroup') {
|
||||
// Creation objet
|
||||
$object = new UserGroup($db);
|
||||
$object->initAsSpecimen();
|
||||
@ -260,6 +276,62 @@ if (function_exists("ldap_connect")) {
|
||||
print $langs->trans("ErrorLDAPMakeManualTest", $conf->ldap->dir_temp).'<br>';
|
||||
}
|
||||
}
|
||||
|
||||
if ($action == 'testsearchgroup') {
|
||||
// TODO Mutualize code following with other ldap_xxxx.php pages
|
||||
|
||||
// Test synchro
|
||||
$ldap = new Ldap();
|
||||
$result = $ldap->connect_bind();
|
||||
|
||||
if ($result > 0) {
|
||||
$required_fields = array(
|
||||
$conf->global->LDAP_KEY_GROUPS,
|
||||
// $conf->global->LDAP_GROUP_FIELD_NAME,
|
||||
$conf->global->LDAP_GROUP_FIELD_DESCRIPTION,
|
||||
$conf->global->LDAP_GROUP_FIELD_GROUPMEMBERS,
|
||||
$conf->global->LDAP_GROUP_FIELD_GROUPID
|
||||
);
|
||||
|
||||
// Remove from required_fields all entries not configured in LDAP (empty) and duplicated
|
||||
$required_fields = array_unique(array_values(array_filter($required_fields, "dol_validElement")));
|
||||
|
||||
// Get from LDAP database an array of results
|
||||
$ldapgroups = $ldap->getRecords('*', $conf->global->LDAP_GROUP_DN, $conf->global->LDAP_KEY_GROUPS, $required_fields, 'group');
|
||||
//$ldapgroups = $ldap->getRecords('*', $conf->global->LDAP_GROUP_DN, $conf->global->LDAP_KEY_GROUPS, '', 'group');
|
||||
|
||||
if (is_array($ldapgroups)) {
|
||||
$liste = array();
|
||||
foreach ($ldapgroups as $key => $ldapgroup) {
|
||||
// Define the label string for this group
|
||||
$label = '';
|
||||
foreach ($required_fields as $value) {
|
||||
if ($value) {
|
||||
$label .= $value."=".$ldapgroup[$value]." ";
|
||||
}
|
||||
}
|
||||
$liste[$key] = $label;
|
||||
}
|
||||
} else {
|
||||
setEventMessages($ldap->error, $ldap->errors, 'errors');
|
||||
}
|
||||
|
||||
print "<br>\n";
|
||||
print "LDAP search for group:<br>\n";
|
||||
print "search: *<br>\n";
|
||||
print "userDN: ".$conf->global->LDAP_GROUP_DN."<br>\n";
|
||||
print "useridentifier: ".$conf->global->LDAP_KEY_GROUPS."<br>\n";
|
||||
print "required_fields: ".implode(',', $required_fields)."<br>\n";
|
||||
print "=> ".count($liste)." records<br>\n";
|
||||
print "\n<br>";
|
||||
} else {
|
||||
print img_picto('', 'error').' ';
|
||||
print '<font class="error">'.$langs->trans("LDAPSynchroKO");
|
||||
print ': '.$ldap->error;
|
||||
print '</font><br>';
|
||||
print $langs->trans("ErrorLDAPMakeManualTest", $conf->ldap->dir_temp).'<br>';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// End of page
|
||||
|
||||
@ -309,8 +309,9 @@ function getResultColumn($name, array $activated, array $loaded, array $function
|
||||
}
|
||||
if (strtolower($name) == 'xdebug') {
|
||||
$html .= ' '.$langs->trans("ModuleActivated", "xdebug");
|
||||
$html .= ' - '.$langs->trans("ModuleActivatedMayExposeInformation");
|
||||
} else {
|
||||
$html .= ' '.$langs->trans("PHPSupport", $name);
|
||||
$html .= ' <span class="opacitymedium">'.$langs->trans("PHPSupport", $name).'</span>';
|
||||
}
|
||||
} else {
|
||||
if (strtolower($name) == 'xdebug') {
|
||||
|
||||
@ -76,7 +76,7 @@ if ($test) {
|
||||
print '<br>';
|
||||
|
||||
print '<br>';
|
||||
print load_fiche_titre($langs->trans("ConfigurationFile"), '', 'folder');
|
||||
print load_fiche_titre($langs->trans("ConfigurationFile").' ('.$conffile.')', '', 'folder');
|
||||
|
||||
print '<strong>'.$langs->trans("dolibarr_main_prod").'</strong>: '.$dolibarr_main_prod;
|
||||
if (empty($dolibarr_main_prod)) {
|
||||
@ -98,7 +98,7 @@ print '<br>';
|
||||
|
||||
print '<br>';
|
||||
print '<br>';
|
||||
print load_fiche_titre($langs->trans("Permissions"), '', 'folder');
|
||||
print load_fiche_titre($langs->trans("PermissionsOnFiles"), '', 'folder');
|
||||
|
||||
print '<strong>'.$langs->trans("PermissionsOnFilesInWebRoot").'</strong>: ';
|
||||
// TODO Check permission are read only except for custom dir
|
||||
@ -151,9 +151,18 @@ print load_fiche_titre($langs->trans("Menu").' '.$langs->trans("SecuritySetup"),
|
||||
|
||||
//print '<strong>'.$langs->trans("PasswordEncryption").'</strong>: ';
|
||||
print '<strong>MAIN_SECURITY_HASH_ALGO</strong> = '.(empty($conf->global->MAIN_SECURITY_HASH_ALGO) ? $langs->trans("Undefined") : '')." ";
|
||||
print '<span class="opacitymedium"> If unset: \'md5\'</span> ';
|
||||
print '<span class="opacitymedium"> - Recommanded value: \'password_hash\'</span><br>';
|
||||
print '<strong>MAIN_SECURITY_SALT</strong> = '.(empty($conf->global->MAIN_SECURITY_SALT) ? $langs->trans("Undefined") : '').'<br>';
|
||||
print '<span class="opacitymedium"> If unset: \'md5\'</span><br>';
|
||||
if ($conf->global->MAIN_SECURITY_HASH_ALGO != 'password_hash') {
|
||||
print '<strong>MAIN_SECURITY_SALT</strong> = '.(empty($conf->global->MAIN_SECURITY_SALT) ? $langs->trans("Undefined") : $conf->global->MAIN_SECURITY_SALT).'<br>';
|
||||
}
|
||||
if ($conf->global->MAIN_SECURITY_HASH_ALGO != 'password_hash') {
|
||||
print '<span class="opacitymedium">The recommanded value for MAIN_SECURITY_HASH_ALGO is now \'password_hash\' but setting it now will make ALL existing passwords of all users not valid, so update is not possible.<br>';
|
||||
print 'If you really want to switch, you must:<br>';
|
||||
print '- Go on home - setup - other and add constant MAIN_SECURITY_HASH_ALGO to value \'password_hash\'<br>';
|
||||
print '- In same session, WITHOUT LOGGING OUT, go into your admin user record and set a new password<br>';
|
||||
print '- You can now logout and login with this new password. You must now reset password of all other users.<br>';
|
||||
print '</span><br>';
|
||||
}
|
||||
print '<br>';
|
||||
// TODO
|
||||
|
||||
|
||||
@ -37,15 +37,18 @@ llxHeader();
|
||||
|
||||
print load_fiche_titre("XDebug", '', 'title_setup');
|
||||
|
||||
print "<br>\n";
|
||||
|
||||
|
||||
if (!function_exists('xdebug_is_enabled')) {
|
||||
print "<br>\n";
|
||||
print 'XDebug seems to be not installed. Function xdebug_is_enabled not found.';
|
||||
llxFooter();
|
||||
exit;
|
||||
}
|
||||
|
||||
print '<span class="opacitymedium">';
|
||||
print $langs->trans("ModuleActivatedMayExposeInformation", $langs->transnoentities("XDebug"));
|
||||
print '</span>';
|
||||
|
||||
print '<br><br>';
|
||||
|
||||
if (function_exists('socket_create')) {
|
||||
$address = ini_get('xdebug.remote_host') ?ini_get('xdebug.remote_host') : '127.0.0.1';
|
||||
|
||||
@ -69,13 +69,20 @@ $search_desc = GETPOST("search_desc", "alpha");
|
||||
$search_ua = GETPOST("search_ua", "restricthtml");
|
||||
$search_prefix_session = GETPOST("search_prefix_session", "restricthtml");
|
||||
|
||||
if (GETPOST("date_startmonth") == '' || GETPOST("date_startmonth") > 0) {
|
||||
$date_start = dol_mktime(0, 0, 0, GETPOST("date_startmonth"), GETPOST("date_startday"), GETPOST("date_startyear"));
|
||||
$now = dol_now();
|
||||
$nowarray = dol_getdate($now);
|
||||
|
||||
if (!GETPOSTISSET("date_startmonth")) {
|
||||
$date_start = dol_get_first_day($nowarray['year'], $nowarray['mon'], 'tzuserrel');
|
||||
} else if (GETPOST("date_startmonth") > 0) {
|
||||
$date_start = dol_mktime(0, 0, 0, GETPOST("date_startmonth", 'int'), GETPOST("date_startday", 'int'), GETPOST("date_startyear", 'int'), 'tzuserrel');
|
||||
} else {
|
||||
$date_start = -1;
|
||||
}
|
||||
if (GETPOST("date_endmonth") == '' || GETPOST("date_endmonth") > 0) {
|
||||
$date_end = dol_mktime(23, 59, 59, GETPOST("date_endmonth"), GETPOST("date_endday"), GETPOST("date_endyear"));
|
||||
if (!GETPOSTISSET("date_endmonth")) {
|
||||
$date_end = dol_get_last_hour(dol_now('gmt'), 'tzuserrel');
|
||||
} elseif (GETPOST("date_endmonth") > 0) {
|
||||
$date_end = dol_get_last_hour(dol_mktime(23, 59, 59, GETPOST("date_endmonth", 'int'), GETPOST("date_endday", 'int'), GETPOST("date_endyear", 'int'), 'tzuserrel'), 'tzuserrel');
|
||||
} else {
|
||||
$date_end = -1;
|
||||
}
|
||||
@ -85,8 +92,6 @@ if ($date_start > 0 && $date_end > 0 && $date_start > $date_end) {
|
||||
$date_end = $date_start + 86400;
|
||||
}
|
||||
|
||||
$now = dol_now();
|
||||
$nowarray = dol_getdate($now);
|
||||
|
||||
if (empty($date_start)) { // We define date_start and date_end
|
||||
$date_start = dol_get_first_day($nowarray['year'], $nowarray['mon'], false);
|
||||
@ -114,7 +119,6 @@ $arrayfields = array(
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
/*
|
||||
* Actions
|
||||
*/
|
||||
@ -316,19 +320,22 @@ if ($result) {
|
||||
// Fields title search
|
||||
print '<tr class="liste_titre">';
|
||||
|
||||
print '<td class="liste_titre" width="15%">'.$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0).'</td>';
|
||||
print '<td class="liste_titre" width="15%">';
|
||||
print $form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0, 0, '', '', '', '', 1, '', '', 'tzuserrel');
|
||||
print $form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0, 0, '', '', '', '', 1, '', '', 'tzuserrel');
|
||||
print '</td>';
|
||||
|
||||
print '<td class="liste_titre left">';
|
||||
print '<input class="flat maxwidth100" type="text" name="search_code" value="'.$search_code.'">';
|
||||
print '<input class="flat maxwidth100" type="text" name="search_code" value="'.dol_escape_htmltag($search_code).'">';
|
||||
print '</td>';
|
||||
|
||||
// IP
|
||||
print '<td class="liste_titre left">';
|
||||
print '<input class="flat maxwidth100" type="text" name="search_ip" value="'.$search_ip.'">';
|
||||
print '<input class="flat maxwidth100" type="text" name="search_ip" value="'.dol_escape_htmltag($search_ip).'">';
|
||||
print '</td>';
|
||||
|
||||
print '<td class="liste_titre left">';
|
||||
print '<input class="flat maxwidth100" type="text" name="search_user" value="'.$search_user.'">';
|
||||
print '<input class="flat maxwidth100" type="text" name="search_user" value="'.dol_escape_htmltag($search_user).'">';
|
||||
print '</td>';
|
||||
|
||||
print '<td class="liste_titre left">';
|
||||
@ -337,13 +344,13 @@ if ($result) {
|
||||
|
||||
if (!empty($arrayfields['e.user_agent']['checked'])) {
|
||||
print '<td class="liste_titre left">';
|
||||
print '<input class="flat maxwidth100" type="text" name="search_ua" value="'.$search_ua.'">';
|
||||
print '<input class="flat maxwidth100" type="text" name="search_ua" value="'.dol_escape_htmltag($search_ua).'">';
|
||||
print '</td>';
|
||||
}
|
||||
|
||||
if (!empty($arrayfields['e.prefix_session']['checked'])) {
|
||||
print '<td class="liste_titre left">';
|
||||
print '<input class="flat maxwidth100" type="text" name="search_prefix_session" value="'.$search_prefix_session.'">';
|
||||
print '<input class="flat maxwidth100" type="text" name="search_prefix_session" value="'.dol_escape_htmltag($search_prefix_session).'">';
|
||||
print '</td>';
|
||||
}
|
||||
|
||||
@ -376,7 +383,7 @@ if ($result) {
|
||||
print '<tr class="oddeven">';
|
||||
|
||||
// Date
|
||||
print '<td class="nowrap left">'.dol_print_date($db->jdate($obj->dateevent), '%Y-%m-%d %H:%M:%S').'</td>';
|
||||
print '<td class="nowrap left">'.dol_print_date($db->jdate($obj->dateevent), '%Y-%m-%d %H:%M:%S', 'tzuserrel').'</td>';
|
||||
|
||||
// Code
|
||||
print '<td>'.$obj->type.'</td>';
|
||||
|
||||
@ -92,8 +92,8 @@ class BOM extends CommonObject
|
||||
'entity' => array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'notnull'=> 1, 'default'=>1, 'index'=>1, 'position'=>5),
|
||||
'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>1, 'noteditable'=>1, 'visible'=>4, 'position'=>10, 'notnull'=>1, 'default'=>'(PROV)', 'index'=>1, 'searchall'=>1, 'comment'=>"Reference of BOM", 'showoncombobox'=>'1',),
|
||||
'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>1, 'visible'=>1, 'position'=>30, 'notnull'=>1, 'searchall'=>1, 'showoncombobox'=>'1', 'autofocusoncreate'=>1),
|
||||
//'bomtype' => array('type'=>'integer', 'label'=>'Type', 'enabled'=>1, 'visible'=>1, 'position'=>10, 'notnull'=>1, 'default'=>'0', 'arrayofkeyval'=>array(0=>'Manufacturing', 1=>'Disassembly')),
|
||||
'bomtype' => array('type'=>'integer', 'label'=>'Type', 'enabled'=>1, 'visible'=>-1, 'position'=>32, 'notnull'=>1, 'default'=>'0', 'arrayofkeyval'=>array(0=>'Manufacturing')),
|
||||
'bomtype' => array('type'=>'integer', 'label'=>'Type', 'enabled'=>1, 'visible'=>1, 'position'=>33, 'notnull'=>1, 'default'=>'0', 'arrayofkeyval'=>array(0=>'Manufacturing', 1=>'Disassemble')),
|
||||
//'bomtype' => array('type'=>'integer', 'label'=>'Type', 'enabled'=>1, 'visible'=>-1, 'position'=>32, 'notnull'=>1, 'default'=>'0', 'arrayofkeyval'=>array(0=>'Manufacturing')),
|
||||
'fk_product' => array('type'=>'integer:Product:product/class/product.class.php:1:(finished IS NULL or finished <> 0)', 'label'=>'Product', 'picto'=>'product', 'enabled'=>1, 'visible'=>1, 'position'=>35, 'notnull'=>1, 'index'=>1, 'help'=>'ProductBOMHelp', 'css'=>'maxwidth500'),
|
||||
'description' => array('type'=>'text', 'label'=>'Description', 'enabled'=>1, 'visible'=>-1, 'position'=>60, 'notnull'=>-1,),
|
||||
'qty' => array('type'=>'real', 'label'=>'Quantity', 'enabled'=>1, 'visible'=>1, 'default'=>1, 'position'=>55, 'notnull'=>1, 'isameasure'=>'1', 'css'=>'maxwidth75imp'),
|
||||
|
||||
@ -349,6 +349,21 @@ class ActionComm extends CommonObject
|
||||
*/
|
||||
public $errors_to;
|
||||
|
||||
/**
|
||||
* @var int number of vote for an event
|
||||
*/
|
||||
public $num_vote;
|
||||
|
||||
/**
|
||||
* @var int if event is paid
|
||||
*/
|
||||
public $event_paid;
|
||||
|
||||
/**
|
||||
* @var int status use but Event organisation module
|
||||
*/
|
||||
public $status;
|
||||
|
||||
/**
|
||||
* Typical value for a event that is in a todo state
|
||||
*/
|
||||
@ -481,7 +496,8 @@ class ActionComm extends CommonObject
|
||||
$this->db->begin();
|
||||
|
||||
$sql = "INSERT INTO ".MAIN_DB_PREFIX."actioncomm";
|
||||
$sql .= "(datec,";
|
||||
$sql .= "(ref,";
|
||||
$sql .= "datec,";
|
||||
$sql .= "datep,";
|
||||
$sql .= "datep2,";
|
||||
$sql .= "durationp,"; // deprecated
|
||||
@ -509,8 +525,12 @@ class ActionComm extends CommonObject
|
||||
$sql .= "email_tocc,";
|
||||
$sql .= "email_tobcc,";
|
||||
$sql .= "email_subject,";
|
||||
$sql .= "errors_to";
|
||||
$sql .= "errors_to,";
|
||||
$sql .= "num_vote,";
|
||||
$sql .= "event_paid,";
|
||||
$sql .= "status";
|
||||
$sql .= ") VALUES (";
|
||||
$sql .= "'(PROV)', ";
|
||||
$sql .= "'".$this->db->idate($now)."', ";
|
||||
$sql .= (strval($this->datep) != '' ? "'".$this->db->idate($this->datep)."'" : "null").", ";
|
||||
$sql .= (strval($this->datef) != '' ? "'".$this->db->idate($this->datef)."'" : "null").", ";
|
||||
@ -539,14 +559,23 @@ class ActionComm extends CommonObject
|
||||
$sql .= (!empty($this->email_tocc) ? "'".$this->db->escape($this->email_tocc)."'" : "null").", ";
|
||||
$sql .= (!empty($this->email_tobcc) ? "'".$this->db->escape($this->email_tobcc)."'" : "null").", ";
|
||||
$sql .= (!empty($this->email_subject) ? "'".$this->db->escape($this->email_subject)."'" : "null").", ";
|
||||
$sql .= (!empty($this->errors_to) ? "'".$this->db->escape($this->errors_to)."'" : "null");
|
||||
$sql .= (!empty($this->errors_to) ? "'".$this->db->escape($this->errors_to)."'" : "null").", ";
|
||||
$sql .= (!empty($this->num_vote) ? (int) $this->num_vote : "null").", ";
|
||||
$sql .= (!empty($this->event_paid) ? (int) $this->event_paid : 0).", ";
|
||||
$sql .= (!empty($this->status) ? (int) $this->status : "0");
|
||||
$sql .= ")";
|
||||
|
||||
dol_syslog(get_class($this)."::add", LOG_DEBUG);
|
||||
$resql = $this->db->query($sql);
|
||||
if ($resql) {
|
||||
$this->ref = $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."actioncomm", "id");
|
||||
|
||||
$sql = "UPDATE ".MAIN_DB_PREFIX."actioncomm SET ref='".$this->db->escape($this->ref)."' WHERE id=".$this->id;
|
||||
$resql = $this->db->query($sql);
|
||||
if (!$resql) {
|
||||
$error++;
|
||||
dol_syslog('Error to process ref: '.$this->db->lasterror(), LOG_ERR);
|
||||
$this->errors[] = $this->db->lasterror();
|
||||
}
|
||||
// Now insert assigned users
|
||||
if (!$error) {
|
||||
//dol_syslog(var_export($this->userassigned, true));
|
||||
@ -697,7 +726,7 @@ class ActionComm extends CommonObject
|
||||
global $langs;
|
||||
|
||||
$sql = "SELECT a.id,";
|
||||
$sql .= " a.id as ref,";
|
||||
$sql .= " a.ref as ref,";
|
||||
$sql .= " a.entity,";
|
||||
$sql .= " a.ref_ext,";
|
||||
$sql .= " a.datep,";
|
||||
@ -716,14 +745,15 @@ class ActionComm extends CommonObject
|
||||
$sql .= " a.email_msgid, a.email_subject, a.email_from, a.email_to, a.email_tocc, a.email_tobcc, a.errors_to,";
|
||||
$sql .= " c.id as type_id, c.code as type_code, c.libelle as type_label, c.color as type_color, c.picto as type_picto,";
|
||||
$sql .= " s.nom as socname,";
|
||||
$sql .= " u.firstname, u.lastname as lastname";
|
||||
$sql .= " u.firstname, u.lastname as lastname,";
|
||||
$sql .= " num_vote, event_paid, a.status";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."actioncomm as a ";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_actioncomm as c ON a.fk_action=c.id ";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user as u on u.rowid = a.fk_user_author";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s on s.rowid = a.fk_soc";
|
||||
$sql .= " WHERE ";
|
||||
if ($ref) {
|
||||
$sql .= " a.id = ".((int) $ref); // No field ref, we use id
|
||||
$sql .= " a.ref = '".$this->db->escape($ref)."'";
|
||||
} elseif ($ref_ext) {
|
||||
$sql .= " a.ref_ext = '".$this->db->escape($ref_ext)."'";
|
||||
} elseif ($email_msgid) {
|
||||
@ -798,6 +828,10 @@ class ActionComm extends CommonObject
|
||||
$this->elementid = $obj->elementid;
|
||||
$this->elementtype = $obj->elementtype;
|
||||
|
||||
$this->num_vote = $obj->num_vote;
|
||||
$this->event_paid = $obj->event_paid;
|
||||
$this->status = $obj->status;
|
||||
|
||||
$this->fetchResources();
|
||||
}
|
||||
$this->db->free($resql);
|
||||
@ -1080,6 +1114,15 @@ class ActionComm extends CommonObject
|
||||
if (!empty($this->elementtype)) {
|
||||
$sql .= ", elementtype=".($this->elementtype ? "'".$this->db->escape($this->elementtype)."'" : "null");
|
||||
}
|
||||
if (!empty($this->num_vote)) {
|
||||
$sql .= ", num_vote=".($this->num_vote ? (int) $this->num_vote : null);
|
||||
}
|
||||
if (!empty($this->event_paid)) {
|
||||
$sql .= ", event_paid=".($this->event_paid ? (int) $this->event_paid : 0);
|
||||
}
|
||||
if (!empty($this->status)) {
|
||||
$sql .= ", status=".($this->status ? (int) $this->status : 0);
|
||||
}
|
||||
$sql .= " WHERE id=".$this->id;
|
||||
|
||||
dol_syslog(get_class($this)."::update", LOG_DEBUG);
|
||||
@ -1759,7 +1802,8 @@ class ActionComm extends CommonObject
|
||||
$sql .= " a.priority, a.fulldayevent, a.location, a.transparency,";
|
||||
$sql .= " u.firstname, u.lastname, u.email,";
|
||||
$sql .= " s.nom as socname,";
|
||||
$sql .= " c.id as type_id, c.code as type_code, c.libelle as type_label";
|
||||
$sql .= " c.id as type_id, c.code as type_code, c.libelle as type_label,";
|
||||
$sql .= " num_vote, event_paid, a.status";
|
||||
$sql .= " FROM (".MAIN_DB_PREFIX."c_actioncomm as c, ".MAIN_DB_PREFIX."actioncomm as a)";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user as u on u.rowid = a.fk_user_author"; // Link to get author of event for export
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s on s.rowid = a.fk_soc";
|
||||
@ -1889,6 +1933,9 @@ class ActionComm extends CommonObject
|
||||
$event['url'] = $url;
|
||||
$event['created'] = $this->db->jdate($obj->datec) - (empty($conf->global->AGENDA_EXPORT_FIX_TZ) ? 0 : ($conf->global->AGENDA_EXPORT_FIX_TZ * 3600));
|
||||
$event['modified'] = $this->db->jdate($obj->datem) - (empty($conf->global->AGENDA_EXPORT_FIX_TZ) ? 0 : ($conf->global->AGENDA_EXPORT_FIX_TZ * 3600));
|
||||
$event['num_vote'] = $this->num_vote;
|
||||
$event['event_paid'] = $this->event_paid;
|
||||
$event['status'] = $this->status;
|
||||
|
||||
// TODO: find a way to call "$this->fetch_userassigned();" without override "$this" properties
|
||||
$this->id = $obj->id;
|
||||
@ -2079,6 +2126,7 @@ class ActionComm extends CommonObject
|
||||
$this->datef = $now;
|
||||
$this->fulldayevent = 0;
|
||||
$this->percentage = 0;
|
||||
$this->status = 0;
|
||||
$this->location = 'Location';
|
||||
$this->transparency = 1; // 1 means opaque
|
||||
$this->priority = 1;
|
||||
|
||||
@ -66,7 +66,7 @@ class AgendaEvents extends DolibarrApi
|
||||
if (!DolibarrApiAccess::$user->rights->agenda->myactions->read) {
|
||||
throw new RestException(401, "Insufficient rights to read an event");
|
||||
}
|
||||
if ($id == 0) {
|
||||
if ($id === 0) {
|
||||
$result = $this->actioncomm->initAsSpecimen();
|
||||
} else {
|
||||
$result = $this->actioncomm->fetch($id);
|
||||
|
||||
@ -153,7 +153,7 @@ class CActionComm
|
||||
public function liste_array($active = '', $idorcode = 'id', $excludetype = '', $onlyautoornot = 0, $morefilter = '', $shortlabel = 0)
|
||||
{
|
||||
// phpcs:enable
|
||||
global $langs, $conf;
|
||||
global $langs, $conf, $user;
|
||||
$langs->load("commercial");
|
||||
|
||||
$repid = array();
|
||||
@ -191,23 +191,29 @@ class CActionComm
|
||||
$qualified = 0; // We discard detailed system events. We keep only the 2 generic lines (AC_OTH and AC_OTH_AUTO)
|
||||
}
|
||||
|
||||
if ($qualified && $obj->module) {
|
||||
if ($obj->module == 'invoice' && !$conf->facture->enabled) {
|
||||
if ($qualified && !empty($obj->module)) {
|
||||
if ($obj->module == 'invoice' && empty($conf->facture->enabled) && empty($user->facture->lire)) {
|
||||
$qualified = 0;
|
||||
}
|
||||
if ($obj->module == 'order' && !$conf->commande->enabled) {
|
||||
if ($obj->module == 'order' && empty($conf->commande->enabled) && empty($user->commande->lire)) {
|
||||
$qualified = 0;
|
||||
}
|
||||
if ($obj->module == 'propal' && !$conf->propal->enabled) {
|
||||
if ($obj->module == 'propal' && empty($conf->propal->enabled) && empty($user->propale->lire)) {
|
||||
$qualified = 0;
|
||||
}
|
||||
if ($obj->module == 'invoice_supplier' && ((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) || !$conf->supplier_invoice->enabled)) {
|
||||
if ($obj->module == 'invoice_supplier' && ((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) || empty($conf->supplier_invoice->enabled)) && empty($user->fournisseur->facture->lire)) {
|
||||
$qualified = 0;
|
||||
}
|
||||
if ($obj->module == 'order_supplier' && ((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) || !$conf->supplier_order->enabled)) {
|
||||
if ($obj->module == 'order_supplier' && ((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) || empty($conf->supplier_order->enabled)) && empty($user->fournisseur->commande->lire)) {
|
||||
$qualified = 0;
|
||||
}
|
||||
if ($obj->module == 'shipping' && !$conf->expedition->enabled) {
|
||||
if ($obj->module == 'shipping' && empty($conf->expedition->enabled) && empty($user->expedition->lire)) {
|
||||
$qualified = 0;
|
||||
}
|
||||
if (preg_match('/@eventorganization/', $obj->module) && empty($conf->eventorganization->enabled) && empty($user->eventorganization->read)) {
|
||||
$qualified = 0;
|
||||
}
|
||||
if (!preg_match('/^system/', $obj->type) && isset($conf->{$obj->module}) && empty($conf->{$obj->module}->enabled)) {
|
||||
$qualified = 0;
|
||||
}
|
||||
}
|
||||
@ -247,12 +253,18 @@ class CActionComm
|
||||
$repcode['AC_ALL_AUTO'] = '-- '.$langs->trans("ActionAC_AUTO");
|
||||
}
|
||||
if ($typecalendar == 'module') {
|
||||
//TODO check if possible to push it between system and systemauto
|
||||
if (preg_match('/@/', $obj->module)) {
|
||||
$module = explode('@', $obj->module)[1];
|
||||
} else {
|
||||
$module = $obj->module;
|
||||
}
|
||||
$label = ' '.$label;
|
||||
if (!isset($repcode['AC_ALL_'.strtoupper($obj->module)])) { // If first time for this module
|
||||
if (!isset($repcode['AC_ALL_'.strtoupper($module)])) { // If first time for this module
|
||||
$idforallfornewmodule--;
|
||||
}
|
||||
$repid[$idforallfornewmodule] = $langs->trans("ActionAC_ALL_".strtoupper($obj->module));
|
||||
$repcode['AC_ALL_'.strtoupper($obj->module)] = '-- '.$langs->trans("Module").' '.ucfirst($obj->module);
|
||||
$repid[$idforallfornewmodule] = $langs->trans("ActionAC_ALL_".strtoupper($module));
|
||||
$repcode['AC_ALL_'.strtoupper($module)] = '-- '.$langs->trans("Module").' '.ucfirst($module);
|
||||
}
|
||||
}
|
||||
$repid[$obj->id] = $label;
|
||||
|
||||
@ -207,8 +207,8 @@ if (empty($reshook)) {
|
||||
$substitutionarray['__OTHER4__'] = $other4;
|
||||
$substitutionarray['__OTHER5__'] = $other5;
|
||||
$substitutionarray['__USER_SIGNATURE__'] = $signature; // Signature is empty when ran from command line or taken from user in parameter)
|
||||
$substitutionarray['__CHECK_READ__'] = '<img src="'.DOL_MAIN_URL_ROOT.'/public/emailing/mailing-read.php?tag='.$obj->tag.'&securitykey='.urlencode($conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY).'" width="1" height="1" style="width:1px;height:1px" border="0"/>';
|
||||
$substitutionarray['__UNSUBSCRIBE__'] = '<a href="'.DOL_MAIN_URL_ROOT.'/public/emailing/mailing-unsubscribe.php?tag='.$obj->tag.'&unsuscrib=1&securitykey='.urlencode($conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY).'" target="_blank">'.$langs->trans("MailUnsubcribe").'</a>';
|
||||
$substitutionarray['__CHECK_READ__'] = '<img src="'.DOL_MAIN_URL_ROOT.'/public/emailing/mailing-read.php?tag='.urlencode($obj->tag).'&securitykey='.urlencode($conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY).'&email='.urlencode($obj->email).'&mtid='.$obj->rowid.'" width="1" height="1" style="width:1px;height:1px" border="0"/>';
|
||||
$substitutionarray['__UNSUBSCRIBE__'] = '<a href="'.DOL_MAIN_URL_ROOT.'/public/emailing/mailing-unsubscribe.php?tag='.urlencode($obj->tag).'&unsuscrib=1&securitykey='.urlencode($conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY).'&email='.urlencode($obj->email).'&mtid='.$obj->rowid.'" target="_blank">'.$langs->trans("MailUnsubcribe").'</a>';
|
||||
|
||||
$onlinepaymentenabled = 0;
|
||||
if (!empty($conf->paypal->enabled)) {
|
||||
|
||||
@ -795,8 +795,8 @@ if (empty($reshook)) {
|
||||
// Set if we used free entry or predefined product
|
||||
$predef = '';
|
||||
$product_desc = (GETPOSTISSET('dp_desc') ? GETPOST('dp_desc', 'restricthtml') : '');
|
||||
$price_ht = price2num(GETPOST('price_ht'));
|
||||
$price_ht_devise = price2num(GETPOST('multicurrency_price_ht'));
|
||||
$price_ht = price2num(GETPOST('price_ht'), 'MU', 2);
|
||||
$price_ht_devise = price2num(GETPOST('multicurrency_price_ht'), 'CU', 2);
|
||||
$prod_entry_mode = GETPOST('prod_entry_mode');
|
||||
if ($prod_entry_mode == 'free') {
|
||||
$idprod = 0;
|
||||
@ -1175,7 +1175,7 @@ if (empty($reshook)) {
|
||||
$info_bits |= 0x01;
|
||||
}
|
||||
|
||||
// Clean parameters
|
||||
// Clean parameters
|
||||
$description = dol_htmlcleanlastbr(GETPOST('product_desc', 'restricthtml'));
|
||||
|
||||
// Define vat_rate
|
||||
@ -1183,13 +1183,13 @@ if (empty($reshook)) {
|
||||
$vat_rate = str_replace('*', '', $vat_rate);
|
||||
$localtax1_rate = get_localtax($vat_rate, 1, $object->thirdparty, $mysoc);
|
||||
$localtax2_rate = get_localtax($vat_rate, 2, $object->thirdparty, $mysoc);
|
||||
$pu_ht = GETPOST('price_ht');
|
||||
$pu_ht = price2num(GETPOST('price_ht'), '', 2);
|
||||
|
||||
// Add buying price
|
||||
$fournprice = price2num(GETPOST('fournprice') ? GETPOST('fournprice') : '');
|
||||
$buyingprice = price2num(GETPOST('buying_price') != '' ? GETPOST('buying_price') : ''); // If buying_price is '0', we muste keep this value
|
||||
|
||||
$pu_ht_devise = GETPOST('multicurrency_subprice');
|
||||
$pu_ht_devise = price2num(GETPOST('multicurrency_subprice'), '', 2);
|
||||
|
||||
$date_start = dol_mktime(GETPOST('date_starthour'), GETPOST('date_startmin'), GETPOST('date_startsec'), GETPOST('date_startmonth'), GETPOST('date_startday'), GETPOST('date_startyear'));
|
||||
$date_end = dol_mktime(GETPOST('date_endhour'), GETPOST('date_endmin'), GETPOST('date_endsec'), GETPOST('date_endmonth'), GETPOST('date_endday'), GETPOST('date_endyear'));
|
||||
|
||||
@ -616,8 +616,8 @@ if (empty($reshook)) {
|
||||
// Set if we used free entry or predefined product
|
||||
$predef = '';
|
||||
$product_desc = (GETPOSTISSET('dp_desc') ? GETPOST('dp_desc', 'restricthtml') : '');
|
||||
$price_ht = price2num(GETPOST('price_ht'), 'MU');
|
||||
$price_ht_devise = price2num(GETPOST('multicurrency_price_ht'), 'CU');
|
||||
$price_ht = price2num(GETPOST('price_ht'), 'MU', 2);
|
||||
$price_ht_devise = price2num(GETPOST('multicurrency_price_ht'), 'CU', 2);
|
||||
$prod_entry_mode = GETPOST('prod_entry_mode');
|
||||
if ($prod_entry_mode == 'free') {
|
||||
$idprod = 0;
|
||||
@ -984,9 +984,9 @@ if (empty($reshook)) {
|
||||
$date_start = dol_mktime(GETPOST('date_starthour'), GETPOST('date_startmin'), GETPOST('date_startsec'), GETPOST('date_startmonth'), GETPOST('date_startday'), GETPOST('date_startyear'));
|
||||
$date_end = dol_mktime(GETPOST('date_endhour'), GETPOST('date_endmin'), GETPOST('date_endsec'), GETPOST('date_endmonth'), GETPOST('date_endday'), GETPOST('date_endyear'));
|
||||
$description = dol_htmlcleanlastbr(GETPOST('product_desc', 'restricthtml'));
|
||||
$pu_ht = GETPOST('price_ht');
|
||||
$pu_ht = price2num(GETPOST('price_ht'), '', 2);
|
||||
$vat_rate = (GETPOST('tva_tx') ?GETPOST('tva_tx') : 0);
|
||||
$pu_ht_devise = GETPOST('multicurrency_subprice');
|
||||
$pu_ht_devise = price2num(GETPOST('multicurrency_subprice'), '', 2);
|
||||
|
||||
// Define info_bits
|
||||
$info_bits = 0;
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
* Copyright (C) 2004-2019 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2017 Pierre-Henry Favre <support@atm-consulting.fr>
|
||||
* Copyright (C) 2020 Maxime DEMAREST <maxime@indelog.fr>
|
||||
* Copyright (C) 2021 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
|
||||
|
||||
@ -1116,7 +1116,7 @@ if ($resql) {
|
||||
print_liste_field_titre($arrayfields['b.num_chq']['label'], $_SERVER['PHP_SELF'], 'b.num_chq', '', $param, '', $sortfield, $sortorder, "center ");
|
||||
}
|
||||
if (!empty($arrayfields['bu.label']['checked'])) {
|
||||
print_liste_field_titre($arrayfields['bu.label']['label'], $_SERVER['PHP_SELF'], 'bu.label', '', $param, '', $sortfield, $sortorder);
|
||||
print_liste_field_titre($arrayfields['bu.label']['label'], $_SERVER['PHP_SELF'], '', '', $param, '', $sortfield, $sortorder);
|
||||
}
|
||||
if (!empty($arrayfields['ba.ref']['checked'])) {
|
||||
print_liste_field_titre($arrayfields['ba.ref']['label'], $_SERVER['PHP_SELF'], 'ba.ref', '', $param, '', $sortfield, $sortorder);
|
||||
@ -1420,6 +1420,7 @@ if ($resql) {
|
||||
} elseif ($links[$key]['type'] == 'member') {
|
||||
} elseif ($links[$key]['type'] == 'sc') {
|
||||
} elseif ($links[$key]['type'] == 'vat') {
|
||||
} elseif ($links[$key]['type'] == 'salary') {
|
||||
} else {
|
||||
// Show link with label $links[$key]['label']
|
||||
if (!empty($objp->label) && !empty($links[$key]['label'])) {
|
||||
|
||||
@ -315,10 +315,11 @@ if ($result) {
|
||||
$i++;
|
||||
|
||||
// Bank account
|
||||
print '<tr><td class="titlefield">'.$langs->trans("Account").'</td>';
|
||||
print '<tr><td class="titlefieldcreate">'.$langs->trans("Account").'</td>';
|
||||
print '<td>';
|
||||
if (!$objp->rappro && !$bankline->getVentilExportCompta()) {
|
||||
$form->select_comptes($acct->id, 'accountid', 0, '', 0);
|
||||
print img_picto('', 'bank_account', 'class="paddingright"');
|
||||
print $form->select_comptes($acct->id, 'accountid', 0, '', 0, '', 0, '', 1);
|
||||
} else {
|
||||
print $acct->getNomUrl(1, 'transactions', 'reflabel');
|
||||
}
|
||||
@ -367,6 +368,11 @@ if ($result) {
|
||||
print img_object($langs->trans('VATDeclaration'), 'bill').' ';
|
||||
print $langs->trans("VATDeclaration").($links[$key]['label'] ? ' '.$links[$key]['label'] : '');
|
||||
print '</a>';
|
||||
} elseif ($links[$key]['type'] == 'salary') {
|
||||
print '<a href="'.DOL_URL_ROOT.'/salaries/card.php?id='.$links[$key]['url_id'].'">';
|
||||
print img_object($langs->trans('Salary'), 'bill').' ';
|
||||
print $langs->trans("Salary").($links[$key]['label'] ? ' - '.$links[$key]['label'] : '');
|
||||
print '</a>';
|
||||
} elseif ($links[$key]['type'] == 'payment_sc') {
|
||||
print '<a href="'.DOL_URL_ROOT.'/compta/payment_sc/card.php?id='.$links[$key]['url_id'].'">';
|
||||
print img_object($langs->trans('Payment'), 'payment').' ';
|
||||
@ -378,7 +384,7 @@ if ($result) {
|
||||
print $langs->trans("VATPayment");
|
||||
print '</a>';
|
||||
} elseif ($links[$key]['type'] == 'payment_salary') {
|
||||
print '<a href="'.DOL_URL_ROOT.'/salaries/card.php?id='.$links[$key]['url_id'].'">';
|
||||
print '<a href="'.DOL_URL_ROOT.'/salaries/payment_salary/card.php?id='.$links[$key]['url_id'].'">';
|
||||
print img_object($langs->trans('PaymentSalary'), 'payment').' ';
|
||||
print $langs->trans("SalaryPayment");
|
||||
print '</a>';
|
||||
@ -561,7 +567,7 @@ if ($result) {
|
||||
// Bank line
|
||||
print '<tr><td class="toptd">'.$form->editfieldkey('RubriquesTransactions', 'custcats', '', $object, 0).'</td><td>';
|
||||
$cate_arbo = $form->select_all_categories(Categorie::TYPE_BANK_LINE, null, 'parent', null, null, 1);
|
||||
print $form->multiselectarray('custcats', $cate_arbo, $arrayselected, null, null, null, null, "90%");
|
||||
print img_picto('', 'category', 'class="paddingright"').$form->multiselectarray('custcats', $cate_arbo, $arrayselected, null, null, null, null, "90%");
|
||||
print "</td></tr>";
|
||||
}
|
||||
|
||||
|
||||
@ -6,6 +6,7 @@
|
||||
* Copyright (C) 2011-2014 Juanjo Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
|
||||
* Copyright (C) 2019 Nicolas ZABOURI <info@inovea-conseil.com>
|
||||
* Copyright (C) 2021 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
|
||||
@ -31,7 +32,7 @@ require '../../main.inc.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/compta/tva/class/tva.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/paymentsocialcontribution.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/salaries/class/paymentsalary.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/salaries/class/salary.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
|
||||
|
||||
@ -84,7 +85,7 @@ if (!$sortorder) {
|
||||
$tva_static = new Tva($db);
|
||||
$socialcontrib = new ChargeSociales($db);
|
||||
$payment_sc_static = new PaymentSocialContribution($db);
|
||||
$sal_static = new PaymentSalary($db);
|
||||
$sal_static = new Salary($db);
|
||||
$accountstatic = new Account($db);
|
||||
|
||||
llxHeader('', $langs->trans("SpecialExpensesArea"));
|
||||
@ -414,6 +415,8 @@ while ($j < $numlt) {
|
||||
$num = $db->num_rows($result);
|
||||
$i = 0;
|
||||
$total = 0;
|
||||
|
||||
print '<div class="div-table-responsive-no-min">'; // You can use div-table-responsive-no-min if you dont need reserved height for your table
|
||||
print '<table class="noborder centpercent">';
|
||||
print '<tr class="liste_titre">';
|
||||
print_liste_field_titre("PeriodEndDate", $_SERVER["PHP_SELF"], "pv.datev", "", $param, 'width="120"', $sortfield, $sortorder);
|
||||
@ -455,6 +458,8 @@ while ($j < $numlt) {
|
||||
print "</tr>";
|
||||
|
||||
print "</table>";
|
||||
print '</div>';
|
||||
|
||||
$db->free($result);
|
||||
} else {
|
||||
dol_print_error($db);
|
||||
@ -463,115 +468,6 @@ while ($j < $numlt) {
|
||||
$j++;
|
||||
}
|
||||
|
||||
|
||||
// Payment Salary
|
||||
/*
|
||||
if (!empty($conf->salaries->enabled) && !empty($user->rights->salaries->read))
|
||||
{
|
||||
$sal = new PaymentSalary($db);
|
||||
|
||||
print "<br>";
|
||||
|
||||
print load_fiche_titre($langs->trans("SalariesPayments").($year ? ' ('.$langs->trans("Year").' '.$year.')' : ''), '', '');
|
||||
|
||||
$sql = "SELECT s.rowid, s.amount, s.label, s.datep as datep, s.datev as datev, s.datesp, s.dateep, s.salary, s.fk_bank, u.salary as current_salary,";
|
||||
$sql .= " pct.code as payment_code,";
|
||||
$sql .= " ba.rowid as bid, ba.ref as bref, ba.number as bnumber, ba.account_number, ba.fk_accountancy_journal, ba.label as blabel";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."payment_salary as s";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."bank as b ON s.fk_bank = b.rowid";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."bank_account as ba ON b.fk_account = ba.rowid";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_paiement as pct ON s.fk_typepayment = pct.id";
|
||||
$sql .= " , ".MAIN_DB_PREFIX."user as u";
|
||||
$sql .= " WHERE s.entity IN (".getEntity('user').")";
|
||||
$sql .= " AND u.rowid = s.fk_user";
|
||||
if ($year > 0)
|
||||
{
|
||||
$sql .= " AND (s.datesp between '".$db->idate(dol_get_first_day($year, 1, false))."' AND '".$db->idate(dol_get_last_day($year, 12, false))."'";
|
||||
$sql .= " OR s.dateep between '".$db->idate(dol_get_first_day($year, 1, false))."' AND '".$db->idate(dol_get_last_day($year, 12, false))."')";
|
||||
}
|
||||
if (preg_match('/^s\./', $sortfield)) $sql .= $db->order($sortfield, $sortorder);
|
||||
|
||||
$result = $db->query($sql);
|
||||
if ($result)
|
||||
{
|
||||
$num = $db->num_rows($result);
|
||||
$i = 0;
|
||||
$total = 0;
|
||||
print '<table class="noborder centpercent">';
|
||||
print '<tr class="liste_titre">';
|
||||
print_liste_field_titre("PeriodEndDate", $_SERVER["PHP_SELF"], "s.dateep", "", $param, 'width="140px"', $sortfield, $sortorder);
|
||||
print_liste_field_titre("Label", $_SERVER["PHP_SELF"], "s.label", "", $param, '', $sortfield, $sortorder);
|
||||
print_liste_field_titre("RefPayment", $_SERVER["PHP_SELF"], "s.rowid", "", $param, '', $sortfield, $sortorder);
|
||||
print_liste_field_titre("DatePayment", $_SERVER["PHP_SELF"], "s.datep", "", $param, 'align="center"', $sortfield, $sortorder);
|
||||
print_liste_field_titre("Type", $_SERVER["PHP_SELF"], "pct.code", "", $param, '', $sortfield, $sortorder);
|
||||
if (!empty($conf->banque->enabled)) print_liste_field_titre("Account", $_SERVER["PHP_SELF"], "ba.label", "", $param, "", $sortfield, $sortorder);
|
||||
print_liste_field_titre("PayedByThisPayment", $_SERVER["PHP_SELF"], "s.amount", "", $param, 'class="right"', $sortfield, $sortorder);
|
||||
print "</tr>\n";
|
||||
|
||||
while ($i < $num)
|
||||
{
|
||||
$obj = $db->fetch_object($result);
|
||||
|
||||
$total = $total + $obj->amount;
|
||||
|
||||
|
||||
print '<tr class="oddeven">';
|
||||
|
||||
print '<td class="left">'.dol_print_date($db->jdate($obj->dateep), 'day').'</td>'."\n";
|
||||
|
||||
print "<td>".$obj->label."</td>\n";
|
||||
|
||||
// Ref payment
|
||||
$sal_static->id = $obj->rowid;
|
||||
$sal_static->ref = $obj->rowid;
|
||||
print '<td class="left">'.$sal_static->getNomUrl(1)."</td>\n";
|
||||
|
||||
// Date
|
||||
print '<td class="center">'.dol_print_date($db->jdate($obj->datep), 'day')."</td>\n";
|
||||
|
||||
// Type payment
|
||||
print '<td>';
|
||||
if ($obj->payment_code) print $langs->trans("PaymentTypeShort".$obj->payment_code).' ';
|
||||
print $obj->num_payment.'</td>';
|
||||
|
||||
// Account
|
||||
if (!empty($conf->banque->enabled))
|
||||
{
|
||||
print '<td>';
|
||||
if ($obj->fk_bank > 0)
|
||||
{
|
||||
//$accountstatic->fetch($obj->fk_bank);
|
||||
$accountstatic->id = $obj->bid;
|
||||
$accountstatic->ref = $obj->bref;
|
||||
$accountstatic->number = $obj->bnumber;
|
||||
$accountstatic->accountancy_number = $obj->account_number;
|
||||
$accountstatic->accountancy_journal = $obj->accountancy_journal;
|
||||
$accountstatic->label = $obj->blabel;
|
||||
print $accountstatic->getNomUrl(1);
|
||||
} else print ' ';
|
||||
print '</td>';
|
||||
}
|
||||
|
||||
// Paid
|
||||
print '<td class="right">'.price($obj->amount)."</td>";
|
||||
print "</tr>\n";
|
||||
|
||||
$i++;
|
||||
}
|
||||
print '<tr class="liste_total"><td colspan="6">'.$langs->trans("Total").'</td>';
|
||||
print '<td class="right">'.price($total)."</td>";
|
||||
print "</tr>";
|
||||
|
||||
print "</table>";
|
||||
$db->free($result);
|
||||
|
||||
print "<br>";
|
||||
} else {
|
||||
dol_print_error($db);
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
print '</form>';
|
||||
|
||||
$parameters = array('user' => $user);
|
||||
|
||||
@ -421,8 +421,8 @@ if (empty($reshook)) {
|
||||
// Set if we used free entry or predefined product
|
||||
$predef = '';
|
||||
$product_desc = (GETPOSTISSET('dp_desc') ? GETPOST('dp_desc', 'restricthtml') : '');
|
||||
$price_ht = price2num(GETPOST('price_ht'), 'MU');
|
||||
$price_ht_devise = price2num(GETPOST('multicurrency_price_ht'), 'CU');
|
||||
$price_ht = price2num(GETPOST('price_ht'), 'MU', 2);
|
||||
$price_ht_devise = price2num(GETPOST('multicurrency_price_ht'), 'CU', 2);
|
||||
$prod_entry_mode = GETPOST('prod_entry_mode', 'alpha');
|
||||
if ($prod_entry_mode == 'free') {
|
||||
$idprod = 0;
|
||||
@ -719,10 +719,10 @@ if (empty($reshook)) {
|
||||
//$date_start = dol_mktime(GETPOST('date_starthour'), GETPOST('date_startmin'), GETPOST('date_startsec'), GETPOST('date_startmonth'), GETPOST('date_startday'), GETPOST('date_startyear'));
|
||||
//$date_end = dol_mktime(GETPOST('date_endhour'), GETPOST('date_endmin'), GETPOST('date_endsec'), GETPOST('date_endmonth'), GETPOST('date_endday'), GETPOST('date_endyear'));
|
||||
$description = dol_htmlcleanlastbr(GETPOST('product_desc', 'restricthtml') ? GETPOST('product_desc', 'restricthtml') : GETPOST('desc', 'restricthtml'));
|
||||
$pu_ht = GETPOST('price_ht');
|
||||
$pu_ht = price2num(GETPOST('price_ht'), '', 2);
|
||||
$vat_rate = (GETPOST('tva_tx') ? GETPOST('tva_tx') : 0);
|
||||
$qty = GETPOST('qty');
|
||||
$pu_ht_devise = GETPOST('multicurrency_subprice');
|
||||
$pu_ht_devise = price2num(GETPOST('multicurrency_subprice'), '', 2);
|
||||
|
||||
// Define info_bits
|
||||
$info_bits = 0;
|
||||
|
||||
@ -1955,8 +1955,8 @@ if (empty($reshook)) {
|
||||
// Set if we used free entry or predefined product
|
||||
$predef = '';
|
||||
$product_desc =(GETPOSTISSET('dp_desc') ? GETPOST('dp_desc', 'restricthtml') : '');
|
||||
$price_ht = price2num(GETPOST('price_ht'));
|
||||
$price_ht_devise = price2num(GETPOST('multicurrency_price_ht'));
|
||||
$price_ht = price2num(GETPOST('price_ht'), 'MU', 2);
|
||||
$price_ht_devise = price2num(GETPOST('multicurrency_price_ht'), 'CU', 2);
|
||||
$prod_entry_mode = GETPOST('prod_entry_mode', 'alpha');
|
||||
if ($prod_entry_mode == 'free') {
|
||||
$idprod = 0;
|
||||
@ -2299,10 +2299,10 @@ if (empty($reshook)) {
|
||||
$date_start = dol_mktime(GETPOST('date_starthour'), GETPOST('date_startmin'), GETPOST('date_startsec'), GETPOST('date_startmonth'), GETPOST('date_startday'), GETPOST('date_startyear'));
|
||||
$date_end = dol_mktime(GETPOST('date_endhour'), GETPOST('date_endmin'), GETPOST('date_endsec'), GETPOST('date_endmonth'), GETPOST('date_endday'), GETPOST('date_endyear'));
|
||||
$description = dol_htmlcleanlastbr(GETPOST('product_desc', 'restricthtml') ? GETPOST('product_desc', 'restricthtml') : GETPOST('desc', 'restricthtml'));
|
||||
$pu_ht = GETPOST('price_ht');
|
||||
$pu_ht = price2num(GETPOST('price_ht'), '', 2);
|
||||
$vat_rate = (GETPOST('tva_tx') ? GETPOST('tva_tx') : 0);
|
||||
$qty = GETPOST('qty');
|
||||
$pu_ht_devise = GETPOST('multicurrency_subprice');
|
||||
$pu_ht_devise = price2num(GETPOST('multicurrency_subprice'), '', 2);
|
||||
|
||||
// Define info_bits
|
||||
$info_bits = 0;
|
||||
|
||||
@ -79,19 +79,22 @@ class FactureRec extends CommonInvoice
|
||||
*/
|
||||
public $title;
|
||||
|
||||
public $socid;
|
||||
public $number;
|
||||
public $date;
|
||||
public $remise;
|
||||
public $remise_absolue;
|
||||
public $remise_percent;
|
||||
public $tva;
|
||||
public $total;
|
||||
public $db_table;
|
||||
public $propalid;
|
||||
|
||||
public $date_last_gen;
|
||||
public $date_when;
|
||||
public $nb_gen_done;
|
||||
public $nb_gen_max;
|
||||
|
||||
public $user_author;
|
||||
|
||||
/**
|
||||
* @var int Frequency
|
||||
*/
|
||||
@ -107,8 +110,22 @@ class FactureRec extends CommonInvoice
|
||||
|
||||
public $usenewprice = 0;
|
||||
|
||||
public $date_lim_reglement;
|
||||
public $cond_reglement_code; // Code in llx_c_paiement
|
||||
public $mode_reglement_code; // Code in llx_c_paiement
|
||||
|
||||
public $suspended; // status
|
||||
|
||||
public $auto_validate; // 0 to create in draft, 1 to create and validate the new invoice
|
||||
public $generate_pdf; // 1 to generate PDF on invoice generation (default)
|
||||
|
||||
/**
|
||||
* @var int 1 if status is draft
|
||||
* @deprecated
|
||||
*/
|
||||
public $brouillon;
|
||||
|
||||
|
||||
/**
|
||||
* 'type' if the field format ('integer', 'integer:ObjectClass:PathToClass[:AddCreateButtonOrNot[:Filter]]', 'varchar(x)', 'double(24,8)', 'real', 'price', 'text', 'html', 'date', 'datetime', 'timestamp', 'duration', 'mail', 'phone', 'url', 'password')
|
||||
* Note: Filter can be a string like "(t.ref:like:'SO-%') or (t.date_creation:<:'20160101') or (t.nature:is:NULL)"
|
||||
@ -335,14 +352,20 @@ class FactureRec extends CommonInvoice
|
||||
$facsrc->lines[$i]->special_code,
|
||||
$facsrc->lines[$i]->label,
|
||||
$facsrc->lines[$i]->fk_unit,
|
||||
$facsrc->lines[$i]->multicurrency_subprice
|
||||
$facsrc->lines[$i]->multicurrency_subprice,
|
||||
0,
|
||||
0,
|
||||
null,
|
||||
$facsrc->lines[$i]->pa_ht
|
||||
);
|
||||
|
||||
if ($result_insert < 0) {
|
||||
$error++;
|
||||
} else {
|
||||
$objectline = new FactureLigneRec($this->db);
|
||||
if ($objectline->fetch($result_insert)) {
|
||||
|
||||
$result2 = $objectline->fetch($result_insert);
|
||||
if ($result2 > 0) {
|
||||
// Extrafields
|
||||
if (method_exists($facsrc->lines[$i], 'fetch_optionals')) {
|
||||
$facsrc->lines[$i]->fetch_optionals($facsrc->lines[$i]->id);
|
||||
@ -353,6 +376,9 @@ class FactureRec extends CommonInvoice
|
||||
if ($result < 0) {
|
||||
$error++;
|
||||
}
|
||||
} elseif ($result2 < 0) {
|
||||
$this->errors[] = $objectline->error;
|
||||
$error++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -403,6 +429,7 @@ class FactureRec extends CommonInvoice
|
||||
|
||||
if ($error) {
|
||||
$this->db->rollback();
|
||||
return -3;
|
||||
} else {
|
||||
$this->db->commit();
|
||||
return $this->id;
|
||||
@ -494,14 +521,15 @@ class FactureRec extends CommonInvoice
|
||||
//$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_element as el ON el.fk_target = f.rowid AND el.targettype = 'facture'";
|
||||
$sql .= ' WHERE f.entity IN ('.getEntity('invoice').')';
|
||||
if ($rowid) {
|
||||
$sql .= ' AND f.rowid='.$rowid;
|
||||
$sql .= ' AND f.rowid='.((int) $rowid);
|
||||
} elseif ($ref) {
|
||||
$sql .= " AND f.titre='".$this->db->escape($ref)."'";
|
||||
} else {
|
||||
$sql .= ' AND f.rowid = 0';
|
||||
}
|
||||
/* This field are not used for template invoice
|
||||
if ($ref_ext) $sql.= " AND f.ref_ext='".$this->db->escape($ref_ext)."'";
|
||||
if ($ref_int) $sql.= " AND f.ref_int='".$this->db->escape($ref_int)."'";
|
||||
*/
|
||||
if ($ref_ext) $sql.= " AND f.ref_ext='".$this->db->escape($ref_ext)."'";
|
||||
*/
|
||||
|
||||
$result = $this->db->query($sql);
|
||||
if ($result) {
|
||||
@ -513,11 +541,7 @@ class FactureRec extends CommonInvoice
|
||||
$this->titre = $obj->title; // deprecated
|
||||
$this->title = $obj->title;
|
||||
$this->ref = $obj->title;
|
||||
$this->ref_client = $obj->ref_client;
|
||||
$this->suspended = $obj->suspended;
|
||||
$this->type = $obj->type;
|
||||
$this->datep = $obj->dp;
|
||||
$this->date = $obj->df;
|
||||
$this->remise_percent = $obj->remise_percent;
|
||||
$this->remise_absolue = $obj->remise_absolue;
|
||||
$this->remise = $obj->remise;
|
||||
@ -526,9 +550,6 @@ class FactureRec extends CommonInvoice
|
||||
$this->total_localtax1 = $obj->localtax1;
|
||||
$this->total_localtax2 = $obj->localtax2;
|
||||
$this->total_ttc = $obj->total_ttc;
|
||||
$this->paye = $obj->paye;
|
||||
$this->close_code = $obj->close_code;
|
||||
$this->close_note = $obj->close_note;
|
||||
$this->socid = $obj->fk_soc;
|
||||
$this->date_lim_reglement = $this->db->jdate($obj->dlr);
|
||||
$this->mode_reglement_id = $obj->fk_mode_reglement;
|
||||
@ -540,14 +561,12 @@ class FactureRec extends CommonInvoice
|
||||
$this->cond_reglement_doc = $obj->cond_reglement_libelle_doc;
|
||||
$this->fk_project = $obj->fk_project;
|
||||
$this->fk_account = $obj->fk_account;
|
||||
$this->fk_facture_source = $obj->fk_facture_source;
|
||||
$this->note_private = $obj->note_private;
|
||||
$this->note_public = $obj->note_public;
|
||||
$this->user_author = $obj->fk_user_author;
|
||||
$this->modelpdf = $obj->model_pdf; // deprecated
|
||||
$this->model_pdf = $obj->model_pdf;
|
||||
$this->rang = $obj->rang;
|
||||
$this->special_code = $obj->special_code;
|
||||
//$this->special_code = $obj->special_code;
|
||||
$this->frequency = $obj->frequency;
|
||||
$this->unit_frequency = $obj->unit_frequency;
|
||||
$this->date_when = $this->db->jdate($obj->date_when);
|
||||
@ -629,11 +648,8 @@ class FactureRec extends CommonInvoice
|
||||
|
||||
$sql = 'SELECT l.rowid, l.fk_product, l.product_type, l.label as custom_label, l.description, l.product_type, l.price, l.qty, l.vat_src_code, l.tva_tx, ';
|
||||
$sql .= ' l.localtax1_tx, l.localtax2_tx, l.localtax1_type, l.localtax2_type, l.remise, l.remise_percent, l.subprice,';
|
||||
$sql .= ' l.info_bits, l.date_start_fill, l.date_end_fill, l.total_ht, l.total_tva, l.total_ttc, l.fk_product_fournisseur_price as fk_fournprice, l.buy_price_ht as pa_ht,';
|
||||
//$sql.= ' l.situation_percent, l.fk_prev_id,';
|
||||
//$sql.= ' l.localtax1_tx, l.localtax2_tx, l.localtax1_type, l.localtax2_type, l.remise_percent, l.fk_remise_except, l.subprice,';
|
||||
$sql .= ' l.info_bits, l.date_start_fill, l.date_end_fill, l.total_ht, l.total_tva, l.total_ttc, l.fk_product_fournisseur_price, l.buy_price_ht as pa_ht,';
|
||||
$sql .= ' l.rang, l.special_code,';
|
||||
//$sql.= ' l.info_bits, l.total_ht, l.total_tva, l.total_localtax1, l.total_localtax2, l.total_ttc, l.fk_code_ventilation, l.fk_product_fournisseur_price as fk_fournprice, l.buy_price_ht as pa_ht,';
|
||||
$sql .= ' l.fk_unit, l.fk_contract_line,';
|
||||
$sql .= ' l.fk_multicurrency, l.multicurrency_code, l.multicurrency_subprice, l.multicurrency_total_ht, l.multicurrency_total_tva, l.multicurrency_total_ttc,';
|
||||
$sql .= ' p.ref as product_ref, p.fk_product_type as fk_product_type, p.label as product_label, p.description as product_desc';
|
||||
@ -655,12 +671,12 @@ class FactureRec extends CommonInvoice
|
||||
$line->rowid = $objp->rowid;
|
||||
$line->desc = $objp->description; // Description line
|
||||
$line->description = $objp->description; // Description line
|
||||
$line->product_type = $objp->product_type; // Type of line
|
||||
$line->ref = $objp->product_ref; // Ref product
|
||||
$line->product_ref = $objp->product_ref; // Ref product
|
||||
$line->libelle = $objp->product_label; // deprecated
|
||||
$line->product_label = $objp->product_label; // Label product
|
||||
$line->product_desc = $objp->product_desc; // Description product
|
||||
$line->product_type = $objp->product_type; // Type of line
|
||||
$line->fk_product_type = $objp->fk_product_type; // Type of product
|
||||
$line->qty = $objp->qty;
|
||||
$line->subprice = $objp->subprice;
|
||||
@ -674,7 +690,7 @@ class FactureRec extends CommonInvoice
|
||||
$line->localtax1_type = $objp->localtax1_type;
|
||||
$line->localtax2_type = $objp->localtax2_type;
|
||||
$line->remise_percent = $objp->remise_percent;
|
||||
$line->fk_remise_except = $objp->fk_remise_except;
|
||||
//$line->fk_remise_except = $objp->fk_remise_except;
|
||||
$line->fk_product = $objp->fk_product;
|
||||
$line->date_start_fill = $objp->date_start_fill;
|
||||
$line->date_end_fill = $objp->date_end_fill;
|
||||
@ -682,10 +698,16 @@ class FactureRec extends CommonInvoice
|
||||
$line->total_ht = $objp->total_ht;
|
||||
$line->total_tva = $objp->total_tva;
|
||||
$line->total_ttc = $objp->total_ttc;
|
||||
|
||||
//$line->code_ventilation = $objp->fk_code_ventilation;
|
||||
$line->fk_fournprice = $objp->fk_fournprice;
|
||||
$marginInfos = getMarginInfos($objp->subprice, $objp->remise_percent, $objp->tva_tx, $objp->localtax1_tx, $objp->localtax2_tx, $line->fk_fournprice, $objp->pa_ht);
|
||||
$line->pa_ht = $marginInfos[0];
|
||||
|
||||
$line->fk_product_fournisseur_price = $objp->fk_product_fournisseur_price;
|
||||
$line->fk_fournprice = $objp->fk_product_fournisseur_price; // For backward compatibility
|
||||
|
||||
$marginInfos = getMarginInfos($objp->subprice, $objp->remise_percent, $objp->tva_tx, $objp->localtax1_tx, $objp->localtax2_tx, $objp->fk_product_fournisseur_price, $objp->pa_ht);
|
||||
|
||||
$line->buyprice = $marginInfos[0];
|
||||
$line->pa_ht = $marginInfos[0]; // For backward compatibility
|
||||
$line->marge_tx = $marginInfos[1];
|
||||
$line->marque_tx = $marginInfos[2];
|
||||
$line->rang = $objp->rang;
|
||||
@ -821,6 +843,7 @@ class FactureRec extends CommonInvoice
|
||||
$localtaxes_type = getLocalTaxesFromRate($txtva, 0, $this->thirdparty, $mysoc);
|
||||
|
||||
// Clean vat code
|
||||
$reg = array();
|
||||
$vat_src_code = '';
|
||||
if (preg_match('/\((.*)\)/', $txtva, $reg)) {
|
||||
$vat_src_code = $reg[1];
|
||||
@ -1261,6 +1284,8 @@ class FactureRec extends CommonInvoice
|
||||
|
||||
$facture->type = self::TYPE_STANDARD;
|
||||
$facture->brouillon = 1;
|
||||
$facture->statut = self::STATUS_DRAFT;
|
||||
$facture->status = self::STATUS_DRAFT;
|
||||
$facture->date = (empty($facturerec->date_when) ? $now : $facturerec->date_when); // We could also use dol_now here but we prefer date_when so invoice has real date when we would like even if we generate later.
|
||||
$facture->socid = $facturerec->socid;
|
||||
|
||||
@ -1586,6 +1611,7 @@ class FactureRec extends CommonInvoice
|
||||
// Initialize parameters
|
||||
$this->id = 0;
|
||||
$this->ref = 'SPECIMEN';
|
||||
$this->title = 'SPECIMEN';
|
||||
$this->specimen = 1;
|
||||
$this->socid = 1;
|
||||
$this->date = $nownotime;
|
||||
@ -1896,6 +1922,18 @@ class FactureLigneRec extends CommonInvoiceLine
|
||||
public $table_element = 'facturedet_rec';
|
||||
|
||||
|
||||
public $fk_product_fournisseur_price;
|
||||
public $fk_fournprice; // For backward compatibility
|
||||
|
||||
public $rang;
|
||||
|
||||
public $desc;
|
||||
public $description;
|
||||
|
||||
public $fk_product_type; // Use instead product_type
|
||||
|
||||
public $fk_contract_line;
|
||||
|
||||
|
||||
/**
|
||||
* Delete line in database
|
||||
@ -1962,6 +2000,10 @@ class FactureLigneRec extends CommonInvoiceLine
|
||||
$sql .= ' l.date_start_fill, l.date_end_fill, l.info_bits, l.total_ht, l.total_tva, l.total_ttc,';
|
||||
$sql .= ' l.rang, l.special_code,';
|
||||
$sql .= ' l.fk_unit, l.fk_contract_line,';
|
||||
$sql .= ' l.import_key, l.fk_multicurrency,';
|
||||
$sql .= ' l.multicurrency_code, l.multicurrency_subprice, l.multicurrency_total_ht, l.multicurrency_total_tva, l.multicurrency_total_ttc,';
|
||||
$sql .= ' l.buy_price_ht, l.fk_product_fournisseur_price,';
|
||||
$sql .= ' l.fk_user_author, l.fk_user_modif,';
|
||||
$sql .= ' p.ref as product_ref, p.fk_product_type as fk_product_type, p.label as product_label, p.description as product_desc';
|
||||
$sql .= ' FROM '.MAIN_DB_PREFIX.'facturedet_rec as l';
|
||||
$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON l.fk_product = p.rowid';
|
||||
@ -2008,7 +2050,19 @@ class FactureLigneRec extends CommonInvoiceLine
|
||||
$this->special_code = $objp->special_code;
|
||||
$this->fk_unit = $objp->fk_unit;
|
||||
$this->fk_contract_line = $objp->fk_contract_line;
|
||||
$this->import_key = $objp->import_key;
|
||||
$this->fk_multicurrency = $objp->fk_multicurrency;
|
||||
$this->multicurrency_code = $objp->multicurrency_code;
|
||||
$this->multicurrency_subprice = $objp->multicurrency_subprice;
|
||||
$this->multicurrency_total_ht = $objp->multicurrency_total_ht;
|
||||
$this->multicurrency_total_tva = $objp->multicurrency_total_tva;
|
||||
$this->multicurrency_total_ttc = $objp->multicurrency_total_ttc;
|
||||
|
||||
$this->buy_price_ht = $objp->buy_price_ht;
|
||||
|
||||
$this->fk_product_fournisseur_price = $objp->fk_product_fournisseur_price;
|
||||
$this->fk_user_author = $objp->fk_user_author;
|
||||
$this->fk_user_modif = $objp->fk_user_modif;
|
||||
|
||||
$this->db->free($result);
|
||||
return 1;
|
||||
|
||||
@ -99,6 +99,12 @@ class Facture extends CommonInvoice
|
||||
*/
|
||||
protected $table_ref_field = 'ref';
|
||||
|
||||
/**
|
||||
* @var int 1 if status is draft
|
||||
* @deprecated
|
||||
*/
|
||||
public $brouillon;
|
||||
|
||||
/**
|
||||
* @var int thirdparty ID
|
||||
*/
|
||||
@ -171,6 +177,7 @@ class Facture extends CommonInvoice
|
||||
//! id of source invoice if replacement invoice or credit note
|
||||
public $fk_facture_source;
|
||||
public $linked_objects = array();
|
||||
|
||||
public $date_lim_reglement;
|
||||
public $cond_reglement_code; // Code in llx_c_paiement
|
||||
public $mode_reglement_code; // Code in llx_c_paiement
|
||||
@ -446,6 +453,8 @@ class Facture extends CommonInvoice
|
||||
$this->mode_reglement_id = 0;
|
||||
}
|
||||
$this->brouillon = 1;
|
||||
$this->status = self::STATUS_DRAFT;
|
||||
$this->statut = self::STATUS_DRAFT;
|
||||
|
||||
// Multicurrency (test on $this->multicurrency_tx because we should take the default rate only if not using origin rate)
|
||||
if (!empty($this->multicurrency_code) && empty($this->multicurrency_tx)) {
|
||||
@ -537,6 +546,8 @@ class Facture extends CommonInvoice
|
||||
$this->mode_reglement_id = 0;
|
||||
}
|
||||
$this->brouillon = 1;
|
||||
$this->status = self::STATUS_DRAFT;
|
||||
$this->statut = self::STATUS_DRAFT;
|
||||
|
||||
$this->linked_objects = $_facrec->linkedObjectsIds;
|
||||
// We do not add link to template invoice or next invoice will be linked to all generated invoices
|
||||
@ -917,8 +928,9 @@ class Facture extends CommonInvoice
|
||||
$localtax1_tx = $_facrec->lines[$i]->localtax1_tx;
|
||||
$localtax2_tx = $_facrec->lines[$i]->localtax2_tx;
|
||||
|
||||
$fk_product_fournisseur_price = empty($_facrec->lines[$i]->fk_product_fournisseur_price) ?null:$_facrec->lines[$i]->fk_product_fournisseur_price;
|
||||
$fk_product_fournisseur_price = empty($_facrec->lines[$i]->fk_product_fournisseur_price) ? null : $_facrec->lines[$i]->fk_product_fournisseur_price;
|
||||
$buyprice = empty($_facrec->lines[$i]->buyprice) ? 0 : $_facrec->lines[$i]->buyprice;
|
||||
|
||||
// If buyprice not defined from template invoice, we try to guess the best value
|
||||
if (!$buyprice && $_facrec->lines[$i]->fk_product > 0) {
|
||||
require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.product.class.php';
|
||||
@ -1682,7 +1694,7 @@ class Facture extends CommonInvoice
|
||||
$this->fetchPreviousNextSituationInvoice();
|
||||
}
|
||||
|
||||
if ($this->statut == self::STATUS_DRAFT) {
|
||||
if ($this->status == self::STATUS_DRAFT) {
|
||||
$this->brouillon = 1;
|
||||
}
|
||||
|
||||
@ -2583,8 +2595,8 @@ class Facture extends CommonInvoice
|
||||
$this->fetch_lines();
|
||||
|
||||
// Check parameters
|
||||
if (!$this->brouillon) {
|
||||
dol_syslog(get_class($this)."::validate no draft status", LOG_WARNING);
|
||||
if ($this->statut != self::STATUS_DRAFT) {
|
||||
dol_syslog(get_class($this)."::validate status is not draft. operation canceled.", LOG_WARNING);
|
||||
return 0;
|
||||
}
|
||||
if (count($this->lines) <= 0) {
|
||||
@ -2848,6 +2860,7 @@ class Facture extends CommonInvoice
|
||||
$this->ref = $num;
|
||||
$this->ref = $num;
|
||||
$this->statut = self::STATUS_VALIDATED;
|
||||
$this->status = self::STATUS_VALIDATED;
|
||||
$this->brouillon = 0;
|
||||
$this->date_validation = $now;
|
||||
$i = 0;
|
||||
@ -2886,7 +2899,7 @@ class Facture extends CommonInvoice
|
||||
* Update price of next invoice
|
||||
*
|
||||
* @param Translate $langs Translate object
|
||||
* @return bool false if KO, true if OK
|
||||
* @return bool false if KO, true if OK
|
||||
*/
|
||||
public function updatePriceNextInvoice(&$langs)
|
||||
{
|
||||
@ -2899,6 +2912,7 @@ class Facture extends CommonInvoice
|
||||
}
|
||||
|
||||
$next_invoice->brouillon = 1;
|
||||
|
||||
foreach ($next_invoice->lines as $line) {
|
||||
$result = $next_invoice->updateline(
|
||||
$line->id,
|
||||
@ -2994,12 +3008,14 @@ class Facture extends CommonInvoice
|
||||
$old_statut = $this->statut;
|
||||
$this->brouillon = 1;
|
||||
$this->statut = self::STATUS_DRAFT;
|
||||
$this->status = self::STATUS_DRAFT;
|
||||
|
||||
// Call trigger
|
||||
$result = $this->call_trigger('BILL_UNVALIDATE', $user);
|
||||
if ($result < 0) {
|
||||
$error++;
|
||||
$this->statut = $old_statut;
|
||||
$this->status = $old_statut;
|
||||
$this->brouillon = 0;
|
||||
}
|
||||
// End call triggers
|
||||
@ -3361,7 +3377,7 @@ class Facture extends CommonInvoice
|
||||
|
||||
dol_syslog(get_class($this)."::updateline rowid=$rowid, desc=$desc, pu=$pu, qty=$qty, remise_percent=$remise_percent, date_start=$date_start, date_end=$date_end, txtva=$txtva, txlocaltax1=$txlocaltax1, txlocaltax2=$txlocaltax2, price_base_type=$price_base_type, info_bits=$info_bits, type=$type, fk_parent_line=$fk_parent_line pa_ht=$pa_ht, special_code=$special_code, fk_unit=$fk_unit, pu_ht_devise=$pu_ht_devise", LOG_DEBUG);
|
||||
|
||||
if ($this->brouillon) {
|
||||
if ($this->statut == self::STATUS_DRAFT) {
|
||||
if (!$this->is_last_in_cycle() && empty($this->error)) {
|
||||
if (!$this->checkProgressLine($rowid, $situation_percent)) {
|
||||
if (!$this->error) {
|
||||
@ -3630,7 +3646,7 @@ class Facture extends CommonInvoice
|
||||
|
||||
dol_syslog(get_class($this)."::deleteline rowid=".$rowid, LOG_DEBUG);
|
||||
|
||||
if (!$this->brouillon) {
|
||||
if ($this->statut != self::STATUS_DRAFT) {
|
||||
$this->error = 'ErrorDeleteLineNotAllowedByObjectStatus';
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -364,8 +364,9 @@ if ($action == 'new') {
|
||||
print '</form>';
|
||||
print '<br>';
|
||||
|
||||
$sql = "SELECT ba.rowid as bid, b.datec as datec, b.dateo as date, b.rowid as transactionid, ";
|
||||
$sql .= " b.amount, ba.label, b.emetteur, b.num_chq, b.banque,";
|
||||
$sql = "SELECT ba.rowid as bid, ba.label,";
|
||||
$sql .= " b.rowid as transactionid, b.label as transactionlabel, b.datec as datec, b.dateo as date, ";
|
||||
$sql .= " b.amount, b.emetteur, b.num_chq, b.banque,";
|
||||
$sql .= " p.rowid as paymentid, p.ref as paymentref";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."bank as b";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."paiement as p ON p.fk_bank = b.rowid";
|
||||
@ -393,6 +394,8 @@ if ($action == 'new') {
|
||||
$lines[$obj->bid][$i]["numero"] = $obj->num_chq;
|
||||
$lines[$obj->bid][$i]["banque"] = $obj->banque;
|
||||
$lines[$obj->bid][$i]["id"] = $obj->transactionid;
|
||||
$lines[$obj->bid][$i]["ref"] = $obj->transactionid;
|
||||
$lines[$obj->bid][$i]["label"] = $obj->transactionlabel;
|
||||
$lines[$obj->bid][$i]["paymentid"] = $obj->paymentid;
|
||||
$lines[$obj->bid][$i]["paymentref"] = $obj->paymentref;
|
||||
$i++;
|
||||
@ -473,8 +476,9 @@ if ($action == 'new') {
|
||||
print '</td>';
|
||||
// Link to bank transaction
|
||||
print '<td class="center">';
|
||||
$accountlinestatic->rowid = $value["id"];
|
||||
if ($accountlinestatic->rowid) {
|
||||
$accountlinestatic->id = $value["id"];
|
||||
$accountlinestatic->ref = $value["ref"];
|
||||
if ($accountlinestatic->id > 0) {
|
||||
print $accountlinestatic->getNomUrl(1);
|
||||
} else {
|
||||
print ' ';
|
||||
@ -594,7 +598,7 @@ if ($action == 'new') {
|
||||
|
||||
|
||||
// List of bank checks
|
||||
$sql = "SELECT b.rowid, b.amount, b.num_chq, b.emetteur,";
|
||||
$sql = "SELECT b.rowid, b.rowid as ref, b.label, b.amount, b.num_chq, b.emetteur,";
|
||||
$sql .= " b.dateo as date, b.datec as datec, b.banque,";
|
||||
$sql .= " p.rowid as pid, p.ref as pref, ba.rowid as bid, p.statut";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."bank_account as ba";
|
||||
@ -648,8 +652,9 @@ if ($action == 'new') {
|
||||
print '</td>';
|
||||
// Link to bank transaction
|
||||
print '<td class="center">';
|
||||
$accountlinestatic->rowid = $objp->rowid;
|
||||
if ($accountlinestatic->rowid) {
|
||||
$accountlinestatic->id = $objp->rowid;
|
||||
$accountlinestatic->ref = $objp->ref;
|
||||
if ($accountlinestatic->id > 0) {
|
||||
print $accountlinestatic->getNomUrl(1);
|
||||
} else {
|
||||
print ' ';
|
||||
|
||||
@ -6,6 +6,7 @@
|
||||
* Copyright (C) 2011-2014 Juanjo Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
|
||||
* Copyright (C) 2019 Nicolas ZABOURI <info@inovea-conseil.com>
|
||||
* Copyright (C) 2021 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
|
||||
@ -31,7 +32,7 @@ require '../../main.inc.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/compta/tva/class/tva.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/paymentsocialcontribution.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/salaries/class/paymentsalary.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/salaries/class/salary.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formsocialcontrib.class.php';
|
||||
@ -95,7 +96,7 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x'
|
||||
$tva_static = new Tva($db);
|
||||
$socialcontrib = new ChargeSociales($db);
|
||||
$payment_sc_static = new PaymentSocialContribution($db);
|
||||
$sal_static = new PaymentSalary($db);
|
||||
$sal_static = new Salary($db);
|
||||
$accountstatic = new Account($db);
|
||||
$formsocialcontrib = new FormSocialContrib($db);
|
||||
|
||||
|
||||
2
htdocs/compta/tva/card.php
Normal file → Executable file
2
htdocs/compta/tva/card.php
Normal file → Executable file
@ -549,7 +549,7 @@ if ($id) {
|
||||
print '</td></tr>';
|
||||
|
||||
if ($action == 'edit') {
|
||||
print '<tr><td class="fieldrequired">' . $langs->trans("Amount") . '</td><td><input name="amount" size="10" value="' . $object->amount . '"></td></tr>';
|
||||
print '<tr><td class="fieldrequired">' . $langs->trans("Amount") . '</td><td><input name="amount" size="10" value="' . price($object->amount) . '"></td></tr>';
|
||||
} else {
|
||||
print '<tr><td>' . $langs->trans("Amount") . '</td><td>' . price($object->amount) . '</td></tr>';
|
||||
}
|
||||
|
||||
@ -1469,9 +1469,13 @@ class Contact extends CommonObject
|
||||
|
||||
$result .= $linkstart;
|
||||
if ($withpicto) {
|
||||
$result .= img_object(($notooltip ? '' : $label), ($this->picto ? $this->picto : 'generic'), ($notooltip ? (($withpicto != 2) ? 'class="paddingright"' : '') : 'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip"'), 0, 0, $notooltip ? 0 : 1);
|
||||
if ($withpicto == -2) {
|
||||
$result .= '<!-- picto photo user --><span class="nopadding userimg'.($moreparam ? ' '.$moreparam : '').'">'.Form::showphoto('contact', $this, 0, 0, 0, 'userphoto'.($withpicto == -3 ? 'small' : ''), 'mini', 0, 1).'</span>';
|
||||
} else {
|
||||
$result .= img_object(($notooltip ? '' : $label), ( $this->picto ? $this->picto : 'generic'), ($notooltip ? (($withpicto != 2) ? 'class="paddingright"' : '') : 'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip"'), 0, 0, $notooltip ? 0 : 1);
|
||||
}
|
||||
}
|
||||
if ($withpicto != 2) {
|
||||
if ($withpicto != 2 && $withpicto != -2) {
|
||||
$result .= ($maxlen ?dol_trunc($this->getFullName($langs), $maxlen) : $this->getFullName($langs));
|
||||
}
|
||||
$result .= $linkend;
|
||||
|
||||
@ -367,8 +367,8 @@ if (empty($reshook)) {
|
||||
// Set if we used free entry or predefined product
|
||||
$predef = '';
|
||||
$product_desc = (GETPOSTISSET('dp_desc') ? GETPOST('dp_desc', 'restricthtml') : '');
|
||||
$price_ht = price2num(GETPOST('price_ht'), 'MU');
|
||||
$price_ht_devise = price2num(GETPOST('multicurrency_price_ht', 'CU'));
|
||||
$price_ht = price2num(GETPOST('price_ht'), 'MU', 2);
|
||||
$price_ht_devise = price2num(GETPOST('multicurrency_price_ht'), 'CU', 2);
|
||||
if (GETPOST('prod_entry_mode', 'alpha') == 'free') {
|
||||
$idprod = 0;
|
||||
$tva_tx = (GETPOST('tva_tx', 'alpha') ? GETPOST('tva_tx', 'alpha') : 0);
|
||||
@ -651,9 +651,8 @@ if (empty($reshook)) {
|
||||
}
|
||||
|
||||
// ajout prix d'achat
|
||||
$fk_fournprice = $_POST['fournprice'];
|
||||
if (!empty($_POST['buying_price'])) {
|
||||
$pa_ht = $_POST['buying_price'];
|
||||
if (GETPOST('buying_price')) {
|
||||
$pa_ht = price2num(GETPOST('buying_price'), '', 2);
|
||||
} else {
|
||||
$pa_ht = null;
|
||||
}
|
||||
|
||||
@ -74,9 +74,9 @@ if ($action == 'add' && !empty($permissiontoadd)) {
|
||||
if (in_array($object->fields[$key]['type'], array('text', 'html'))) {
|
||||
$value = GETPOST($key, 'restricthtml');
|
||||
} elseif ($object->fields[$key]['type'] == 'date') {
|
||||
$value = dol_mktime(12, 0, 0, GETPOST($key.'month', 'int'), GETPOST($key.'day', 'int'), GETPOST($key.'year', 'int'));
|
||||
$value = dol_mktime(12, 0, 0, GETPOST($key.'month', 'int'), GETPOST($key.'day', 'int'), GETPOST($key.'year', 'int')); // for date without hour, we use gmt
|
||||
} elseif ($object->fields[$key]['type'] == 'datetime') {
|
||||
$value = dol_mktime(GETPOST($key.'hour', 'int'), GETPOST($key.'min', 'int'), 0, GETPOST($key.'month', 'int'), GETPOST($key.'day', 'int'), GETPOST($key.'year', 'int'));
|
||||
$value = dol_mktime(GETPOST($key.'hour', 'int'), GETPOST($key.'min', 'int'), GETPOST($key.'sec', 'int'), GETPOST($key.'month', 'int'), GETPOST($key.'day', 'int'), GETPOST($key.'year', 'int'), 'tzuserrel');
|
||||
} elseif ($object->fields[$key]['type'] == 'duration') {
|
||||
$value = 60 * 60 * GETPOST($key.'hour', 'int') + 60 * GETPOST($key.'min', 'int');
|
||||
} elseif (preg_match('/^(integer|price|real|double)/', $object->fields[$key]['type'])) {
|
||||
@ -174,9 +174,9 @@ if ($action == 'update' && !empty($permissiontoadd)) {
|
||||
$value = GETPOST($key, 'restricthtml');
|
||||
}
|
||||
} elseif ($object->fields[$key]['type'] == 'date') {
|
||||
$value = dol_mktime(12, 0, 0, GETPOST($key.'month'), GETPOST($key.'day'), GETPOST($key.'year'));
|
||||
$value = dol_mktime(12, 0, 0, GETPOST($key.'month', 'int'), GETPOST($key.'day', 'int'), GETPOST($key.'year', 'int')); // for date without hour, we use gmt
|
||||
} elseif ($object->fields[$key]['type'] == 'datetime') {
|
||||
$value = dol_mktime(GETPOST($key.'hour'), GETPOST($key.'min'), 0, GETPOST($key.'month'), GETPOST($key.'day'), GETPOST($key.'year'));
|
||||
$value = dol_mktime(GETPOST($key.'hour', 'int'), GETPOST($key.'min', 'int'), GETPOST($key.'sec', 'int'), GETPOST($key.'month', 'int'), GETPOST($key.'day', 'int'), GETPOST($key.'year', 'int'), 'tzuserrel');
|
||||
} elseif ($object->fields[$key]['type'] == 'duration') {
|
||||
if (GETPOST($key.'hour', 'int') != '' || GETPOST($key.'min', 'int') != '') {
|
||||
$value = 60 * 60 * GETPOST($key.'hour', 'int') + 60 * GETPOST($key.'min', 'int');
|
||||
|
||||
@ -875,6 +875,13 @@ abstract class CommonInvoiceLine extends CommonObjectLine
|
||||
*/
|
||||
public $subprice;
|
||||
|
||||
/**
|
||||
* Unit price before taxes
|
||||
* @var float
|
||||
* @deprecated
|
||||
*/
|
||||
public $price;
|
||||
|
||||
/**
|
||||
* Id of corresponding product
|
||||
* @var int
|
||||
@ -905,12 +912,31 @@ abstract class CommonInvoiceLine extends CommonObjectLine
|
||||
*/
|
||||
public $localtax2_tx;
|
||||
|
||||
/**
|
||||
* Local tax 1 type
|
||||
* @var string
|
||||
*/
|
||||
public $localtax1_type;
|
||||
|
||||
/**
|
||||
* Local tax 2 type
|
||||
* @var string
|
||||
*/
|
||||
public $localtax2_type;
|
||||
|
||||
/**
|
||||
* Percent of discount
|
||||
* @var float
|
||||
*/
|
||||
public $remise_percent;
|
||||
|
||||
/**
|
||||
* Fixed discount
|
||||
* @var float
|
||||
* @deprecated
|
||||
*/
|
||||
public $remise;
|
||||
|
||||
/**
|
||||
* Total amount before taxes
|
||||
* @var float
|
||||
@ -944,6 +970,13 @@ abstract class CommonInvoiceLine extends CommonObjectLine
|
||||
public $date_start_fill; // If set to 1, when invoice is created from a template invoice, it will also auto set the field date_start at creation
|
||||
public $date_end_fill; // If set to 1, when invoice is created from a template invoice, it will also auto set the field date_end at creation
|
||||
|
||||
public $buy_price_ht;
|
||||
public $buyprice; // For backward compatibility
|
||||
public $pa_ht; // For backward compatibility
|
||||
|
||||
public $marge_tx;
|
||||
public $marque_tx;
|
||||
|
||||
/**
|
||||
* List of cumulative options:
|
||||
* Bit 0: 0 for common VAT - 1 if VAT french NPR
|
||||
@ -960,4 +993,7 @@ abstract class CommonInvoiceLine extends CommonObjectLine
|
||||
public $multicurrency_total_ht;
|
||||
public $multicurrency_total_tva;
|
||||
public $multicurrency_total_ttc;
|
||||
|
||||
public $fk_user_author;
|
||||
public $fk_user_modif;
|
||||
}
|
||||
|
||||
@ -2237,6 +2237,9 @@ abstract class CommonObject
|
||||
if (get_class($this) == 'Tva') {
|
||||
$fieldname = 'fk_typepayment';
|
||||
}
|
||||
if (get_class($this) == 'Salary') {
|
||||
$fieldname = 'fk_typepayment';
|
||||
}
|
||||
|
||||
$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
|
||||
$sql .= ' SET '.$fieldname.' = '.(($id > 0 || $id == '0') ? $id : 'NULL');
|
||||
@ -6452,11 +6455,10 @@ abstract class CommonObject
|
||||
}
|
||||
}
|
||||
|
||||
if (in_array($type, array('date', 'datetime'))) {
|
||||
if (in_array($type, array('date'))) {
|
||||
$tmp = explode(',', $size);
|
||||
$newsize = $tmp[0];
|
||||
|
||||
$showtime = in_array($type, array('datetime')) ? 1 : 0;
|
||||
$showtime = 0;
|
||||
|
||||
// Do not show current date when field not required (see selectDate() method)
|
||||
if (!$required && $value == '') {
|
||||
@ -6465,6 +6467,16 @@ abstract class CommonObject
|
||||
|
||||
// TODO Must also support $moreparam
|
||||
$out = $form->selectDate($value, $keyprefix.$key.$keysuffix, $showtime, $showtime, $required, '', 1, (($keyprefix != 'search_' && $keyprefix != 'search_options_') ? 1 : 0), 0, 1);
|
||||
} elseif (in_array($type, array('datetime'))) {
|
||||
$tmp = explode(',', $size);
|
||||
$newsize = $tmp[0];
|
||||
$showtime = 1;
|
||||
|
||||
// Do not show current date when field not required (see selectDate() method)
|
||||
if (!$required && $value == '') $value = '-1';
|
||||
|
||||
// TODO Must also support $moreparam
|
||||
$out = $form->selectDate($value, $keyprefix.$key.$keysuffix, $showtime, $showtime, $required, '', 1, (($keyprefix != 'search_' && $keyprefix != 'search_options_') ? 1 : 0), 0, 1, '', '', '', 1, '', '', 'tzuserrel');
|
||||
} elseif (in_array($type, array('duration'))) {
|
||||
$out = $form->select_duration($keyprefix.$key.$keysuffix, $value, 0, 'text', 0, 1);
|
||||
} elseif (in_array($type, array('int', 'integer'))) {
|
||||
@ -7022,13 +7034,13 @@ abstract class CommonObject
|
||||
$value = $this->getLibStatut(3);
|
||||
} elseif ($type == 'date') {
|
||||
if (!empty($value)) {
|
||||
$value = dol_print_date($value, 'day');
|
||||
$value = dol_print_date($value, 'day'); // We suppose dates without time are always gmt (storage of course + output)
|
||||
} else {
|
||||
$value = '';
|
||||
}
|
||||
} elseif ($type == 'datetime' || $type == 'timestamp') {
|
||||
if (!empty($value)) {
|
||||
$value = dol_print_date($value, 'dayhour');
|
||||
$value = dol_print_date($value, 'dayhour', 'tzuserrel');
|
||||
} else {
|
||||
$value = '';
|
||||
}
|
||||
@ -7407,12 +7419,19 @@ abstract class CommonObject
|
||||
}
|
||||
|
||||
// Convert date into timestamp format (value in memory must be a timestamp)
|
||||
if (in_array($extrafields->attributes[$this->table_element]['type'][$key], array('date', 'datetime'))) {
|
||||
if (in_array($extrafields->attributes[$this->table_element]['type'][$key], array('date'))) {
|
||||
$datenotinstring = $this->array_options['options_'.$key];
|
||||
if (!is_numeric($this->array_options['options_'.$key])) { // For backward compatibility
|
||||
$datenotinstring = $this->db->jdate($datenotinstring);
|
||||
}
|
||||
$value = (GETPOSTISSET($keyprefix.'options_'.$key.$keysuffix)) ? dol_mktime(GETPOST($keyprefix.'options_'.$key.$keysuffix."hour", 'int', 3), GETPOST($keyprefix.'options_'.$key.$keysuffix."min", 'int', 3), 0, GETPOST($keyprefix.'options_'.$key.$keysuffix."month", 'int', 3), GETPOST($keyprefix.'options_'.$key.$keysuffix."day", 'int', 3), GETPOST($keyprefix.'options_'.$key.$keysuffix."year", 'int', 3)) : $datenotinstring;
|
||||
$value = (GETPOSTISSET($keyprefix.'options_'.$key.$keysuffix)) ? dol_mktime(12, 0, 0, GETPOST($keyprefix.'options_'.$key.$keysuffix."month", 'int', 3), GETPOST($keyprefix.'options_'.$key.$keysuffix."day", 'int', 3), GETPOST($keyprefix.'options_'.$key.$keysuffix."year", 'int', 3)) : $datenotinstring;
|
||||
}
|
||||
if (in_array($extrafields->attributes[$this->table_element]['type'][$key], array('datetime'))) {
|
||||
$datenotinstring = $this->array_options['options_'.$key];
|
||||
if (!is_numeric($this->array_options['options_'.$key])) { // For backward compatibility
|
||||
$datenotinstring = $this->db->jdate($datenotinstring);
|
||||
}
|
||||
$value = (GETPOSTISSET($keyprefix.'options_'.$key.$keysuffix)) ? dol_mktime(GETPOST($keyprefix.'options_'.$key.$keysuffix."hour", 'int', 3), GETPOST($keyprefix.'options_'.$key.$keysuffix."min", 'int', 3), GETPOST($keyprefix.'options_'.$key.$keysuffix."sec", 'int', 3), GETPOST($keyprefix.'options_'.$key.$keysuffix."month", 'int', 3), GETPOST($keyprefix.'options_'.$key.$keysuffix."day", 'int', 3), GETPOST($keyprefix.'options_'.$key.$keysuffix."year", 'int', 3), 'tzuserrel') : $datenotinstring;
|
||||
}
|
||||
// Convert float submited string into real php numeric (value in memory must be a php numeric)
|
||||
if (in_array($extrafields->attributes[$this->table_element]['type'][$key], array('price', 'double'))) {
|
||||
@ -7519,7 +7538,7 @@ abstract class CommonObject
|
||||
*/
|
||||
public function getJSListDependancies($type = '_extra')
|
||||
{
|
||||
$out .= '
|
||||
$out = '
|
||||
<script>
|
||||
jQuery(document).ready(function() {
|
||||
function showOptions'.$type.'(child_list, parent_list, orig_select)
|
||||
@ -8171,12 +8190,14 @@ abstract class CommonObject
|
||||
*/
|
||||
public function setVarsFromFetchObj(&$obj)
|
||||
{
|
||||
global $db;
|
||||
|
||||
foreach ($this->fields as $field => $info) {
|
||||
if ($this->isDate($info)) {
|
||||
if (empty($obj->{$field}) || $obj->{$field} === '0000-00-00 00:00:00' || $obj->{$field} === '1000-01-01 00:00:00') {
|
||||
$this->{$field} = 0;
|
||||
if (is_null($obj->{$field}) || $obj->{$field} === '' || $obj->{$field} === '0000-00-00 00:00:00' || $obj->{$field} === '1000-01-01 00:00:00') {
|
||||
$this->{$field} = '';
|
||||
} else {
|
||||
$this->{$field} = strtotime($obj->{$field});
|
||||
$this->{$field} = $db->jdate($obj->{$field});
|
||||
}
|
||||
} elseif ($this->isArray($info)) {
|
||||
if (!empty($obj->{$field})) {
|
||||
|
||||
@ -198,8 +198,6 @@ class DefaultValues extends CommonObject
|
||||
|
||||
// Load source object
|
||||
$result = $object->fetchCommon($fromid);
|
||||
if ($result > 0 && !empty($object->table_element_line)) $object->fetchLines();
|
||||
|
||||
|
||||
// Reset some properties
|
||||
unset($object->id);
|
||||
|
||||
@ -1062,11 +1062,10 @@ class ExtraFields
|
||||
}
|
||||
}
|
||||
|
||||
if (in_array($type, array('date', 'datetime'))) {
|
||||
if (in_array($type, array('date'))) {
|
||||
$tmp = explode(',', $size);
|
||||
$newsize = $tmp[0];
|
||||
|
||||
$showtime = in_array($type, array('datetime')) ? 1 : 0;
|
||||
$showtime = 0;
|
||||
|
||||
// Do not show current date when field not required (see selectDate() method)
|
||||
if (!$required && $value == '') {
|
||||
@ -1079,16 +1078,41 @@ class ExtraFields
|
||||
'start' => isset($value['start']) ? $value['start'] : '',
|
||||
'end' => isset($value['end']) ? $value['end'] : ''
|
||||
);
|
||||
$out = '<div ' . ($moreparam ? $moreparam : '') . '><div class="nowrap">'
|
||||
. $form->selectDate($prefill['start'], $keyprefix.$key.$keysuffix.'_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("From"))
|
||||
. '</div><div class="nowrap">'
|
||||
. $form->selectDate($prefill['end'], $keyprefix.$key.$keysuffix.'_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("to"))
|
||||
. '</div></div>';
|
||||
$out = '<div ' . ($moreparam ? $moreparam : '') . '><div class="nowrap">';
|
||||
$out .= $form->selectDate($prefill['start'], $keyprefix.$key.$keysuffix.'_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("From"));
|
||||
$out .= '</div><div class="nowrap">';
|
||||
$out .= $form->selectDate($prefill['end'], $keyprefix.$key.$keysuffix.'_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("to"));
|
||||
$out .= '</div></div>';
|
||||
} else {
|
||||
// TODO Must also support $moreparam
|
||||
$out = $form->selectDate($value, $keyprefix.$key.$keysuffix, $showtime, $showtime, $required, '', 1, (($keyprefix != 'search_' && $keyprefix != 'search_options_') ? 1 : 0), 0, 1);
|
||||
}
|
||||
} elseif (in_array($type, array('int', 'integer'))) {
|
||||
} elseif (in_array($type, array('datetime'))) {
|
||||
$tmp = explode(',', $size);
|
||||
$newsize = $tmp[0];
|
||||
$showtime = 1;
|
||||
|
||||
// Do not show current date when field not required (see selectDate() method)
|
||||
if (!$required && $value == '') {
|
||||
$value = '-1';
|
||||
}
|
||||
|
||||
if ($mode == 1) {
|
||||
// search filter on a date extrafield shows two inputs to select a date range
|
||||
$prefill = array(
|
||||
'start' => isset($value['start']) ? $value['start'] : '',
|
||||
'end' => isset($value['end']) ? $value['end'] : ''
|
||||
);
|
||||
$out = '<div ' . ($moreparam ? $moreparam : '') . '><div class="nowrap">';
|
||||
$out .= $form->selectDate($prefill['start'], $keyprefix.$key.$keysuffix.'_start', 1, 1, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("From"), 'tzuserrel');
|
||||
$out .= '</div><div class="nowrap">';
|
||||
$out .= $form->selectDate($prefill['end'], $keyprefix.$key.$keysuffix.'_end', 1, 1, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("to"), 'tzuserrel');
|
||||
$out .= '</div></div>';
|
||||
} else {
|
||||
// TODO Must also support $moreparam
|
||||
$out = $form->selectDate($value, $keyprefix.$key.$keysuffix, $showtime, $showtime, $required, '', 1, (($keyprefix != 'search_' && $keyprefix != 'search_options_') ? 1 : 0), 0, 1, '', '', '', 1, '', '', 'tzuserrel');
|
||||
}
|
||||
} elseif (in_array($type, array('int', 'integer'))) {
|
||||
$tmp = explode(',', $size);
|
||||
$newsize = $tmp[0];
|
||||
$out = '<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" maxlength="'.$newsize.'" value="'.dol_escape_htmltag($value).'"'.($moreparam ? $moreparam : '').'>';
|
||||
@ -1611,10 +1635,10 @@ class ExtraFields
|
||||
$showsize = 0;
|
||||
if ($type == 'date') {
|
||||
$showsize = 10;
|
||||
$value = dol_print_date($value, 'day');
|
||||
$value = dol_print_date($value, 'day'); // For date without hour, date is always GMT for storage and output
|
||||
} elseif ($type == 'datetime') {
|
||||
$showsize = 19;
|
||||
$value = dol_print_date($value, 'dayhour');
|
||||
$value = dol_print_date($value, 'dayhour', 'tzuserrel');
|
||||
} elseif ($type == 'int') {
|
||||
$showsize = 10;
|
||||
} elseif ($type == 'double') {
|
||||
@ -2064,12 +2088,10 @@ class ExtraFields
|
||||
|
||||
if (in_array($key_type, array('date'))) {
|
||||
// Clean parameters
|
||||
// TODO GMT date in memory must be GMT so we should add gm=true in parameters
|
||||
$value_key = dol_mktime(0, 0, 0, $_POST["options_".$key."month"], $_POST["options_".$key."day"], $_POST["options_".$key."year"]);
|
||||
$value_key = dol_mktime(12, 0, 0, GETPOST("options_".$key."month", 'int'), GETPOST("options_".$key."day", 'int'), GETPOST("options_".$key."year", 'int'));
|
||||
} elseif (in_array($key_type, array('datetime'))) {
|
||||
// Clean parameters
|
||||
// TODO GMT date in memory must be GMT so we should add gm=true in parameters
|
||||
$value_key = dol_mktime($_POST["options_".$key."hour"], $_POST["options_".$key."min"], 0, $_POST["options_".$key."month"], $_POST["options_".$key."day"], $_POST["options_".$key."year"]);
|
||||
$value_key = dol_mktime(GETPOST("options_".$key."hour", 'int'), GETPOST("options_".$key."min", 'int'), GETPOST("options_".$key."sec", 'int'), GETPOST("options_".$key."month", 'int'), GETPOST("options_".$key."day", 'int'), GETPOST("options_".$key."year", 'int'), 'tzuserrel');
|
||||
} elseif (in_array($key_type, array('checkbox', 'chkbxlst'))) {
|
||||
$value_arr = GETPOST("options_".$key, 'array'); // check if an array
|
||||
if (!empty($value_arr)) {
|
||||
@ -2134,32 +2156,33 @@ class ExtraFields
|
||||
$key_type = $this->attributes[$extrafieldsobjectkey]['type'][$key];
|
||||
}
|
||||
|
||||
if (in_array($key_type, array('date', 'datetime'))) {
|
||||
if (in_array($key_type, array('date'))) {
|
||||
$dateparamname_start = $keysuffix . 'options_' . $key . $keyprefix . '_start';
|
||||
$dateparamname_end = $keysuffix . 'options_' . $key . $keyprefix . '_end';
|
||||
if (GETPOSTISSET($dateparamname_start . 'year') && GETPOSTISSET($dateparamname_end . 'year')) {
|
||||
// values provided as a date pair (start date + end date), each date being broken down as year, month, day, etc.
|
||||
$value_key = array(
|
||||
'start' => dol_mktime(
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
GETPOST($dateparamname_start . 'month', 'int'),
|
||||
GETPOST($dateparamname_start . 'day', 'int'),
|
||||
GETPOST($dateparamname_start . 'year', 'int')
|
||||
),
|
||||
'end' => dol_mktime(
|
||||
23,
|
||||
59,
|
||||
59,
|
||||
GETPOST($dateparamname_end . 'month', 'int'),
|
||||
GETPOST($dateparamname_end . 'day', 'int'),
|
||||
GETPOST($dateparamname_end . 'year', 'int')
|
||||
)
|
||||
'start' => dol_mktime(0, 0, 0, GETPOST($dateparamname_start . 'month', 'int'), GETPOST($dateparamname_start . 'day', 'int'), GETPOST($dateparamname_start . 'year', 'int')),
|
||||
'end' => dol_mktime(23, 59, 59, GETPOST($dateparamname_end . 'month', 'int'), GETPOST($dateparamname_end . 'day', 'int'), GETPOST($dateparamname_end . 'year', 'int'))
|
||||
);
|
||||
} elseif (GETPOSTISSET($keysuffix."options_".$key.$keyprefix."year")) {
|
||||
// Clean parameters
|
||||
$value_key = dol_mktime(GETPOST($keysuffix."options_".$key.$keyprefix."hour", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."min", 'int'), 0, GETPOST($keysuffix."options_".$key.$keyprefix."month", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."day", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."year", 'int'));
|
||||
$value_key = dol_mktime(12, 0, 0, GETPOST($keysuffix."options_".$key.$keyprefix."month", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."day", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."year", 'int'));
|
||||
} else {
|
||||
continue; // Value was not provided, we should not set it.
|
||||
}
|
||||
} elseif (in_array($key_type, array('datetime'))) {
|
||||
$dateparamname_start = $keysuffix . 'options_' . $key . $keyprefix . '_start';
|
||||
$dateparamname_end = $keysuffix . 'options_' . $key . $keyprefix . '_end';
|
||||
if (GETPOSTISSET($dateparamname_start . 'year') && GETPOSTISSET($dateparamname_end . 'year')) {
|
||||
// values provided as a date pair (start date + end date), each date being broken down as year, month, day, etc.
|
||||
$value_key = array(
|
||||
'start' => dol_mktime(GETPOST($dateparamname_start . 'hour', 'int'), GETPOST($dateparamname_start . 'min', 'int'), GETPOST($dateparamname_start . 'sec', 'int'), GETPOST($dateparamname_start . 'month', 'int'), GETPOST($dateparamname_start . 'day', 'int'), GETPOST($dateparamname_start . 'year', 'int'), 'tzuserrel'),
|
||||
'end' => dol_mktime(GETPOST($dateparamname_end . 'hour', 'int'), GETPOST($dateparamname_start . 'min', 'int'), GETPOST($dateparamname_start . 'sec', 'int'), GETPOST($dateparamname_end . 'month', 'int'), GETPOST($dateparamname_end . 'day', 'int'), GETPOST($dateparamname_end . 'year', 'int'), 'tzuserrel')
|
||||
);
|
||||
} elseif (GETPOSTISSET($keysuffix."options_".$key.$keyprefix."year")) {
|
||||
// Clean parameters
|
||||
$value_key = dol_mktime(GETPOST($keysuffix."options_".$key.$keyprefix."hour", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."min", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."sec", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."month", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."day", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."year", 'int'), 'tzuserrel');
|
||||
} else {
|
||||
continue; // Value was not provided, we should not set it.
|
||||
}
|
||||
|
||||
@ -120,7 +120,8 @@ class HookManager
|
||||
if ($resaction) {
|
||||
$controlclassname = 'Actions'.ucfirst($module);
|
||||
$actionInstance = new $controlclassname($this->db);
|
||||
$this->hooks[$context][$module] = $actionInstance;
|
||||
$priority = empty($actionInstance->priority) ? 50 : $actionInstance->priority;
|
||||
$this->hooks[$context][$priority.':'.$module] = $actionInstance;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -130,6 +131,8 @@ class HookManager
|
||||
dol_syslog(get_class($this)."::initHooks Loading hooks: ".join(', ', $arraytolog), LOG_DEBUG);
|
||||
}
|
||||
|
||||
ksort($this->hooks[$context], SORT_NATURAL);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -238,8 +241,10 @@ class HookManager
|
||||
$error = 0;
|
||||
foreach ($this->hooks as $context => $modules) { // $this->hooks is an array with context as key and value is an array of modules that handle this context
|
||||
if (!empty($modules)) {
|
||||
// Loop on each active hooks of module for this context
|
||||
foreach ($modules as $module => $actionclassinstance) {
|
||||
//print "Before hook ".get_class($actionclassinstance)." method=".$method." hooktype=".$hooktype." results=".count($actionclassinstance->results)." resprints=".count($actionclassinstance->resprints)." resaction=".$resaction."<br>\n";
|
||||
$module = preg_replace('/^\d+:/', '', $module);
|
||||
//print "Before hook ".get_class($actionclassinstance)." method=".$method." module=".$module." hooktype=".$hooktype." results=".count($actionclassinstance->results)." resprints=".count($actionclassinstance->resprints)." resaction=".$resaction."<br>\n";
|
||||
|
||||
// test to avoid running twice a hook, when a module implements several active contexts
|
||||
if (in_array($module, $modulealreadyexecuted)) {
|
||||
|
||||
@ -7714,8 +7714,8 @@ class Form
|
||||
print '<td class="center">'.$objp->ref.'</td>';
|
||||
print '<td>'.$objp->ref_client.'</td>';
|
||||
print '<td class="right">';
|
||||
if ($possiblelink[label] == 'LinkToContract') {
|
||||
$form = new Form($db);
|
||||
if ($possiblelink['label'] == 'LinkToContract') {
|
||||
$form = new Form($this->db);
|
||||
print $form->textwithpicto('', $langs->trans("InformationOnLinkToContract")).' ';
|
||||
}
|
||||
print price($objp->total_ht).'</td>';
|
||||
@ -7732,8 +7732,6 @@ class Form
|
||||
dol_print_error($this->db);
|
||||
}
|
||||
print '</div>';
|
||||
if ($num > 0) {
|
||||
}
|
||||
|
||||
//$linktoelem.=($linktoelem?' ':'');
|
||||
if ($num > 0) {
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
/* Copyright (C) 2013-2015 Jean-François FERRY <hello@librethic.io>
|
||||
* Copyright (C) 2016 Christophe Battarel <christophe@altairis.fr>
|
||||
* Copyright (C) 2019 Frédéric France <frederic.france@netlogic.fr>
|
||||
* Copyright (C) 2021 Juanjo Menent <jmenent@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
|
||||
@ -517,7 +518,7 @@ class FormTicket
|
||||
print ' selected="selected"';
|
||||
} elseif ($selected == $id) {
|
||||
print ' selected="selected"';
|
||||
} elseif ($arraytypes['use_default'] == "1" && !$empty) {
|
||||
} elseif ($arraytypes['use_default'] == "1" && !$selected && !$empty) {
|
||||
print ' selected="selected"';
|
||||
}
|
||||
|
||||
@ -612,7 +613,7 @@ class FormTicket
|
||||
print ' selected="selected"';
|
||||
} elseif ($selected == $id) {
|
||||
print ' selected="selected"';
|
||||
} elseif ($arraycategories['use_default'] == "1" && !$empty) {
|
||||
} elseif ($arraycategories['use_default'] == "1" && !$selected && !$empty) {
|
||||
print ' selected="selected"';
|
||||
}
|
||||
|
||||
@ -713,7 +714,7 @@ class FormTicket
|
||||
print ' selected="selected"';
|
||||
} elseif ($selected == $id) {
|
||||
print ' selected="selected"';
|
||||
} elseif ($arrayseverities['use_default'] == "1" && !$empty) {
|
||||
} elseif ($arrayseverities['use_default'] == "1" && !$selected && !$empty) {
|
||||
print ' selected="selected"';
|
||||
}
|
||||
|
||||
|
||||
@ -42,6 +42,7 @@ class InfoBox
|
||||
0 => 'Home',
|
||||
1 => 'userhome',
|
||||
2 => 'membersindex',
|
||||
3 => 'thirdpartiesindex',
|
||||
27 => 'AccountancyHome'
|
||||
);
|
||||
} else {
|
||||
|
||||
@ -139,6 +139,7 @@ class Ldap
|
||||
$this->groups = $conf->global->LDAP_GROUP_DN;
|
||||
|
||||
$this->filter = $conf->global->LDAP_FILTER_CONNECTION; // Filter on user
|
||||
$this->filtergroup = $conf->global->LDAP_GROUP_FILTER; // Filter on groups
|
||||
$this->filtermember = $conf->global->LDAP_MEMBER_FILTER; // Filter on member
|
||||
|
||||
// Users
|
||||
@ -935,7 +936,7 @@ class Ldap
|
||||
* @param string $userDn DN (Ex: ou=adherents,ou=people,dc=parinux,dc=org)
|
||||
* @param string $useridentifier Name of key field (Ex: uid)
|
||||
* @param array $attributeArray Array of fields required. Note this array must also contains field $useridentifier (Ex: sn,userPassword)
|
||||
* @param int $activefilter '1' or 'user'=use field this->filter as filter instead of parameter $search, 'member'=use field this->filtermember as filter
|
||||
* @param int $activefilter '1' or 'user'=use field this->filter as filter instead of parameter $search, 'group'=use field this->filtergroup as filter, 'member'=use field this->filtermember as filter
|
||||
* @param array $attributeAsArray Array of fields wanted as an array not a string
|
||||
* @return array Array of [id_record][ldap_field]=value
|
||||
*/
|
||||
@ -955,6 +956,8 @@ class Ldap
|
||||
if (!empty($activefilter)) {
|
||||
if (((string) $activefilter == '1' || (string) $activefilter == 'user') && $this->filter) {
|
||||
$filter = '('.$this->filter.')';
|
||||
} elseif (((string) $activefilter == 'group') && $this->filtergroup ) {
|
||||
$filter = '('.$this->filtergroup.')';
|
||||
} elseif (((string) $activefilter == 'member') && $this->filter) {
|
||||
$filter = '('.$this->filtermember.')';
|
||||
} else {
|
||||
|
||||
@ -710,51 +710,35 @@ function getFormeJuridiqueLabel($code)
|
||||
*/
|
||||
function getCountriesInEEC()
|
||||
{
|
||||
global $conf;
|
||||
|
||||
// List of all country codes that are in europe for european vat rules
|
||||
// List found on http://ec.europa.eu/taxation_customs/common/faq/faq_1179_en.htm#9
|
||||
$country_code_in_EEC = array(
|
||||
'AT', // Austria
|
||||
'BE', // Belgium
|
||||
'BG', // Bulgaria
|
||||
'CY', // Cyprus
|
||||
'CZ', // Czech republic
|
||||
'DE', // Germany
|
||||
'DK', // Danemark
|
||||
'EE', // Estonia
|
||||
'ES', // Spain
|
||||
'FI', // Finland
|
||||
'FR', // France
|
||||
'GB', // United Kingdom
|
||||
'GR', // Greece
|
||||
'HR', // Croatia
|
||||
'NL', // Holland
|
||||
'HU', // Hungary
|
||||
'IE', // Ireland
|
||||
'IM', // Isle of Man - Included in UK
|
||||
'IT', // Italy
|
||||
'LT', // Lithuania
|
||||
'LU', // Luxembourg
|
||||
'LV', // Latvia
|
||||
'MC', // Monaco - Included in France
|
||||
'MT', // Malta
|
||||
//'NO', // Norway
|
||||
'PL', // Poland
|
||||
'PT', // Portugal
|
||||
'RO', // Romania
|
||||
'SE', // Sweden
|
||||
'SK', // Slovakia
|
||||
'SI', // Slovenia
|
||||
'UK', // United Kingdom
|
||||
//'CH', // Switzerland - No. Swizerland in not in EEC
|
||||
);
|
||||
global $conf, $db;
|
||||
$country_code_in_EEC = array();
|
||||
|
||||
if (!empty($conf->global->MAIN_COUNTRIES_IN_EEC)) {
|
||||
// For example MAIN_COUNTRIES_IN_EEC = 'AT,BE,BG,CY,CZ,DE,DK,EE,ES,FI,FR,GB,GR,HR,NL,HU,IE,IM,IT,LT,LU,LV,MC,MT,PL,PT,RO,SE,SK,SI,UK'
|
||||
$country_code_in_EEC = explode(',', $conf->global->MAIN_COUNTRIES_IN_EEC);
|
||||
}
|
||||
} elseif (!empty($conf->cache['country_code_in_EEC'])) {
|
||||
// Use of cache to reduce number of database requests
|
||||
$country_code_in_EEC = $conf->cache['country_code_in_EEC'];
|
||||
} else {
|
||||
$sql = "SELECT cc.code FROM ".MAIN_DB_PREFIX."c_country as cc";
|
||||
$sql .= " WHERE cc.eec = 1";
|
||||
|
||||
$resql = $db->query($sql);
|
||||
if ($resql) {
|
||||
$num = $db->num_rows($resql);
|
||||
$i = 0;
|
||||
while ($i < $num) {
|
||||
$objp = $db->fetch_object($resql);
|
||||
$country_code_in_EEC[] = $objp->code;
|
||||
$i++;
|
||||
}
|
||||
} else {
|
||||
dol_print_error($db);
|
||||
}
|
||||
$conf->cache['country_code_in_EEC'] = $country_code_in_EEC;
|
||||
}
|
||||
return $country_code_in_EEC;
|
||||
}
|
||||
|
||||
@ -772,7 +756,7 @@ function isInEEC($object)
|
||||
|
||||
$country_code_in_EEC = getCountriesInEEC();
|
||||
|
||||
//print "dd".$this->country_code;
|
||||
//print "dd".$object->country_code;
|
||||
return in_array($object->country_code, $country_code_in_EEC);
|
||||
}
|
||||
|
||||
|
||||
@ -546,24 +546,28 @@ function dol_get_last_day($year, $month = 12, $gm = false)
|
||||
* Return GMT time for last hour of a given GMT date (it replaces hours, min and second part to 23:59:59)
|
||||
*
|
||||
* @param int $date Date GMT
|
||||
* @param mixed $gm False or 0 or 'tzserver' = Return date to compare with server TZ,
|
||||
* True or 1 or 'gmt' to compare with GMT date.
|
||||
* @return int Date for last hour of a given date
|
||||
*/
|
||||
function dol_get_last_hour($date)
|
||||
function dol_get_last_hour($date, $gm = 'tzserver')
|
||||
{
|
||||
$tmparray = dol_getdate($date);
|
||||
return dol_mktime(23, 59, 59, $tmparray['mon'], $tmparray['mday'], $tmparray['year'], false);
|
||||
return dol_mktime(23, 59, 59, $tmparray['mon'], $tmparray['mday'], $tmparray['year'], $gm);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return GMT time for first hour of a given GMT date (it removes hours, min and second part)
|
||||
*
|
||||
* @param int $date Date
|
||||
* @param int $date Date GMT
|
||||
* @param mixed $gm False or 0 or 'tzserver' = Return date to compare with server TZ,
|
||||
* True or 1 or 'gmt' to compare with GMT date.
|
||||
* @return int Date for last hour of a given date
|
||||
*/
|
||||
function dol_get_first_hour($date)
|
||||
function dol_get_first_hour($date, $gm = 'tzserver')
|
||||
{
|
||||
$tmparray = dol_getdate($date);
|
||||
return dol_mktime(0, 0, 0, $tmparray['mon'], $tmparray['mday'], $tmparray['year'], false);
|
||||
return dol_mktime(0, 0, 0, $tmparray['mon'], $tmparray['mday'], $tmparray['year'], $gm);
|
||||
}
|
||||
|
||||
/** Return first day of week for a date. First day of week may be monday if option MAIN_START_WEEK is 1.
|
||||
|
||||
@ -1874,7 +1874,7 @@ function dol_banner_tab($object, $paramid, $morehtml = '', $shownav = 1, $fieldi
|
||||
} else {
|
||||
$morehtmlstatus .= '<span class="statusrefbuy">'.$object->getLibStatut(6, 1).'</span>';
|
||||
}
|
||||
} elseif (in_array($object->element, array('facture', 'invoice', 'invoice_supplier', 'chargesociales', 'loan', 'tva'))) {
|
||||
} elseif (in_array($object->element, array('facture', 'invoice', 'invoice_supplier', 'chargesociales', 'loan', 'tva', 'salary'))) {
|
||||
$tmptxt = $object->getLibStatut(6, $object->totalpaye);
|
||||
if (empty($tmptxt) || $tmptxt == $object->getLibStatut(3)) {
|
||||
$tmptxt = $object->getLibStatut(5, $object->totalpaye);
|
||||
@ -2119,7 +2119,7 @@ function dol_print_date($time, $format = '', $tzoutput = 'auto', $outputlangs =
|
||||
global $conf, $langs;
|
||||
|
||||
if ($tzoutput === 'auto') {
|
||||
$tzoutput = (empty($conf) ? 'tzserver' : $conf->tzuserinputkey);
|
||||
$tzoutput = (empty($conf) ? 'tzserver' : (isset($conf->tzuserinputkey) ? $conf->tzuserinputkey : 'tzserver'));
|
||||
}
|
||||
|
||||
// Clean parameters
|
||||
@ -4277,7 +4277,7 @@ function img_searchclear($titlealt = 'default', $other = '')
|
||||
* @param string $text Text info
|
||||
* @param integer $infoonimgalt Info is shown only on alt of star picto, otherwise it is show on output after the star picto
|
||||
* @param int $nodiv No div
|
||||
* @param string $admin '1'=Info for admin users. '0'=Info for standard users (change only the look), 'error','xxx'=Other
|
||||
* @param string $admin '1'=Info for admin users. '0'=Info for standard users (change only the look), 'error', 'warning', 'xxx'=Other
|
||||
* @param string $morecss More CSS ('', 'warning', 'error')
|
||||
* @param string $textfordropdown Show a text to click to dropdown the info box.
|
||||
* @return string String with info text
|
||||
@ -5159,12 +5159,12 @@ function price2num($amount, $rounding = '', $option = 0)
|
||||
|
||||
// Convert value to universal number format (no thousand separator, '.' as decimal separator)
|
||||
if ($option != 1) { // If not a PHP number or unknown, we change or clean format
|
||||
//print 'PP'.$amount.' - '.$dec.' - '.$thousand.' - '.intval($amount).'<br>';
|
||||
//print "\n".'PP'.$amount.' - '.$dec.' - '.$thousand.' - '.intval($amount).'<br>';
|
||||
if (!is_numeric($amount)) {
|
||||
$amount = preg_replace('/[a-zA-Z\/\\\*\(\)\<\>\_]/', '', $amount);
|
||||
}
|
||||
|
||||
if ($option == 2 && $thousand == '.' && preg_match('/\.(\d\d\d)$/', (string) $amount)) { // It means the . is used as a thousand separator and string come frominput data, so 1.123 is 1123
|
||||
if ($option == 2 && $thousand == '.' && preg_match('/\.(\d\d\d)$/', (string) $amount)) { // It means the . is used as a thousand separator and string come from input data, so 1.123 is 1123
|
||||
$amount = str_replace($thousand, '', $amount);
|
||||
}
|
||||
|
||||
@ -5188,6 +5188,7 @@ function price2num($amount, $rounding = '', $option = 0)
|
||||
$amount = str_replace($thousand, '', $amount); // Replace of thousand before replace of dec to avoid pb if thousand is .
|
||||
$amount = str_replace($dec, '.', $amount);
|
||||
}
|
||||
//print ' XX'.$amount.' '.$rounding;
|
||||
|
||||
// Now, make a rounding if required
|
||||
if ($rounding) {
|
||||
@ -5205,13 +5206,13 @@ function price2num($amount, $rounding = '', $option = 0)
|
||||
} elseif (is_numeric($rounding)) {
|
||||
$nbofdectoround = (int) $rounding;
|
||||
}
|
||||
//print "RR".$amount.' - '.$nbofdectoround.'<br>';
|
||||
//print " RR".$amount.' - '.$nbofdectoround.'<br>';
|
||||
if (dol_strlen($nbofdectoround)) {
|
||||
$amount = round(is_string($amount) ? (float) $amount : $amount, $nbofdectoround); // $nbofdectoround can be 0.
|
||||
} else {
|
||||
return 'ErrorBadParameterProvidedToFunction';
|
||||
}
|
||||
//print 'SS'.$amount.' - '.$nbofdec.' - '.$dec.' - '.$thousand.' - '.$nbofdectoround.'<br>';
|
||||
//print ' SS'.$amount.' - '.$nbofdec.' - '.$dec.' - '.$thousand.' - '.$nbofdectoround.'<br>';
|
||||
|
||||
// Convert amount to format with dolibarr dec and thousand (this is because PHP convert a number
|
||||
// to format defined by LC_NUMERIC after a calculation and we want source format to be defined by Dolibarr setup.
|
||||
@ -5811,9 +5812,12 @@ function get_default_tva(Societe $thirdparty_seller, Societe $thirdparty_buyer,
|
||||
if (($seller_in_cee && $buyer_in_cee)) {
|
||||
$isacompany = $thirdparty_buyer->isACompany();
|
||||
if ($isacompany) {
|
||||
if (!empty($conf->global->MAIN_USE_VAT_OF_PRODUCT_FOR_COMPANIES_IN_EEC_WITH_INVALID_VAT_ID) && !isValidVATID($thirdparty_buyer)) {
|
||||
//print 'VATRULE 6';
|
||||
return get_product_vat_for_country($idprod, $thirdparty_seller, $idprodfournprice);
|
||||
if (!empty($conf->global->MAIN_USE_VAT_OF_PRODUCT_FOR_COMPANIES_IN_EEC_WITH_INVALID_VAT_ID)) {
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
|
||||
if (!isValidVATID($thirdparty_buyer)) {
|
||||
//print 'VATRULE 6';
|
||||
return get_product_vat_for_country($idprod, $thirdparty_seller, $idprodfournprice);
|
||||
}
|
||||
}
|
||||
//print 'VATRULE 3';
|
||||
return 0;
|
||||
|
||||
@ -806,7 +806,8 @@ function projectLinesa(&$inc, $parent, &$lines, &$level, $var, $showproject, &$t
|
||||
}
|
||||
}
|
||||
|
||||
// Contacts of task
|
||||
// Contacts of tasks. Disabled, because available by default just after
|
||||
/*
|
||||
if (!empty($conf->global->PROJECT_SHOW_CONTACTS_IN_LIST)) {
|
||||
print '<td>';
|
||||
foreach (array('internal', 'external') as $source) {
|
||||
@ -826,6 +827,36 @@ function projectLinesa(&$inc, $parent, &$lines, &$level, $var, $showproject, &$t
|
||||
}
|
||||
}
|
||||
print '</td>';
|
||||
}*/
|
||||
|
||||
// Contacts of task
|
||||
if (count($arrayfields) > 0 && !empty($arrayfields['c.assigned']['checked'])) {
|
||||
print '<td>';
|
||||
foreach (array('internal', 'external') as $source) {
|
||||
$tab = $lines[$i]->liste_contact(-1, $source);
|
||||
$num = count($tab);
|
||||
if (!empty($num)) {
|
||||
foreach ($tab as $contacttask) {
|
||||
//var_dump($contacttask);
|
||||
if ($source == 'internal') {
|
||||
$c = new User($db);
|
||||
} else {
|
||||
$c = new Contact($db);
|
||||
}
|
||||
$c->fetch($contacttask['id']);
|
||||
if (!empty($c->photo)) {
|
||||
print $c->getNomUrl(-2).' ';
|
||||
} else {
|
||||
if (get_class($c) == 'User') {
|
||||
print $c->getNomUrl(2, '', 0, 0, 24, 1);//.' ';
|
||||
} else {
|
||||
print $c->getNomUrl(2);//.' ';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
print '</td>';
|
||||
}
|
||||
|
||||
// Extra fields
|
||||
@ -965,10 +996,14 @@ function projectLinesa(&$inc, $parent, &$lines, &$level, $var, $showproject, &$t
|
||||
print '</td>';
|
||||
}
|
||||
}
|
||||
// Contacts of task
|
||||
// Contacts of task for backward compatibility,
|
||||
if (!empty($conf->global->PROJECT_SHOW_CONTACTS_IN_LIST)) {
|
||||
print '<td></td>';
|
||||
}
|
||||
// Contacts of task
|
||||
if (count($arrayfields) > 0 && !empty($arrayfields['c.assigned']['checked'])) {
|
||||
print '<td></td>';
|
||||
}
|
||||
print '<td class=""></td>';
|
||||
print '</tr>';
|
||||
}
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
/**
|
||||
* Copyright (C) 2015 Charlie BENKE <charlie@patas-monkey.com>
|
||||
* Copyright (C) 2019 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||
* Copyright (C) 2021 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
|
||||
@ -33,7 +34,7 @@ function salaries_prepare_head($object)
|
||||
$head = array();
|
||||
|
||||
$head[$h][0] = DOL_URL_ROOT.'/salaries/card.php?id='.$object->id;
|
||||
$head[$h][1] = $langs->trans("SalaryPayment");
|
||||
$head[$h][1] = $langs->trans("Salary");
|
||||
$head[$h][2] = 'card';
|
||||
$h++;
|
||||
|
||||
|
||||
@ -282,12 +282,10 @@ function show_ticket_messaging($conf, $langs, $db, $filterobj, $objcon = '', $no
|
||||
dol_print_error('', 'BadParameter');
|
||||
}
|
||||
|
||||
$out = '';
|
||||
$histo = array();
|
||||
$numaction = 0;
|
||||
$now = dol_now();
|
||||
|
||||
// Open DSI -- Fix order by -- Begin
|
||||
$sortfield_list = explode(',', $sortfield);
|
||||
$sortfield_label_list = array('a.id' => 'id', 'a.datep' => 'dp', 'a.percent' => 'percent');
|
||||
$sortfield_new_list = array();
|
||||
@ -297,7 +295,7 @@ function show_ticket_messaging($conf, $langs, $db, $filterobj, $objcon = '', $no
|
||||
$sortfield_new = implode(',', $sortfield_new_list);
|
||||
|
||||
if (!empty($conf->agenda->enabled)) {
|
||||
// Recherche histo sur actioncomm
|
||||
// Search histo on actioncomm
|
||||
if (is_object($objcon) && $objcon->id > 0) {
|
||||
$sql = "SELECT DISTINCT a.id, a.label as label,";
|
||||
} else {
|
||||
@ -464,87 +462,97 @@ function show_ticket_messaging($conf, $langs, $db, $filterobj, $objcon = '', $no
|
||||
$sql = $sql2;
|
||||
}
|
||||
|
||||
//TODO Add limit in nb of results
|
||||
$sql .= $db->order($sortfield_new, $sortorder);
|
||||
// TODO Add limit in nb of results
|
||||
if ($sql) { // May not be defined if module Agenda is not enabled and mailing module disabled too
|
||||
$sql .= $db->order($sortfield_new, $sortorder);
|
||||
|
||||
dol_syslog("company.lib::show_actions_done", LOG_DEBUG);
|
||||
$resql = $db->query($sql);
|
||||
if ($resql) {
|
||||
$i = 0;
|
||||
$num = $db->num_rows($resql);
|
||||
dol_syslog("company.lib::show_actions_done", LOG_DEBUG);
|
||||
$resql = $db->query($sql);
|
||||
if ($resql) {
|
||||
$i = 0;
|
||||
$num = $db->num_rows($resql);
|
||||
|
||||
while ($i < $num) {
|
||||
$obj = $db->fetch_object($resql);
|
||||
while ($i < $num) {
|
||||
$obj = $db->fetch_object($resql);
|
||||
|
||||
if ($obj->type == 'action') {
|
||||
$contactaction = new ActionComm($db);
|
||||
$contactaction->id = $obj->id;
|
||||
$result = $contactaction->fetchResources();
|
||||
if ($result < 0) {
|
||||
dol_print_error($db);
|
||||
setEventMessage("company.lib::show_actions_done Error fetch ressource", 'errors');
|
||||
if ($obj->type == 'action') {
|
||||
$contactaction = new ActionComm($db);
|
||||
$contactaction->id = $obj->id;
|
||||
$result = $contactaction->fetchResources();
|
||||
if ($result < 0) {
|
||||
dol_print_error($db);
|
||||
setEventMessage("company.lib::show_actions_done Error fetch ressource", 'errors');
|
||||
}
|
||||
|
||||
//if ($donetodo == 'todo') $sql.= " AND ((a.percent >= 0 AND a.percent < 100) OR (a.percent = -1 AND a.datep > '".$db->idate($now)."'))";
|
||||
//elseif ($donetodo == 'done') $sql.= " AND (a.percent = 100 OR (a.percent = -1 AND a.datep <= '".$db->idate($now)."'))";
|
||||
$tododone = '';
|
||||
if (($obj->percent >= 0 and $obj->percent < 100) || ($obj->percent == -1 && $obj->datep > $now)) {
|
||||
$tododone = 'todo';
|
||||
}
|
||||
|
||||
$histo[$numaction] = array(
|
||||
'type'=>$obj->type,
|
||||
'tododone'=>$tododone,
|
||||
'id'=>$obj->id,
|
||||
'datestart'=>$db->jdate($obj->dp),
|
||||
'dateend'=>$db->jdate($obj->dp2),
|
||||
'note'=>$obj->label,
|
||||
'message'=>$obj->message,
|
||||
'percent'=>$obj->percent,
|
||||
|
||||
'userid'=>$obj->user_id,
|
||||
'login'=>$obj->user_login,
|
||||
'userfirstname'=>$obj->user_firstname,
|
||||
'userlastname'=>$obj->user_lastname,
|
||||
'userphoto'=>$obj->user_photo,
|
||||
|
||||
'contact_id'=>$obj->fk_contact,
|
||||
'socpeopleassigned' => $contactaction->socpeopleassigned,
|
||||
'lastname'=>$obj->lastname,
|
||||
'firstname'=>$obj->firstname,
|
||||
'fk_element'=>$obj->fk_element,
|
||||
'elementtype'=>$obj->elementtype,
|
||||
// Type of event
|
||||
'acode'=>$obj->acode,
|
||||
'alabel'=>$obj->alabel,
|
||||
'libelle'=>$obj->alabel, // deprecated
|
||||
'apicto'=>$obj->apicto
|
||||
);
|
||||
} else {
|
||||
$histo[$numaction] = array(
|
||||
'type'=>$obj->type,
|
||||
'tododone'=>'done',
|
||||
'id'=>$obj->id,
|
||||
'datestart'=>$db->jdate($obj->dp),
|
||||
'dateend'=>$db->jdate($obj->dp2),
|
||||
'note'=>$obj->label,
|
||||
'message'=>$obj->message,
|
||||
'percent'=>$obj->percent,
|
||||
'acode'=>$obj->acode,
|
||||
|
||||
'userid'=>$obj->user_id,
|
||||
'login'=>$obj->user_login,
|
||||
'userfirstname'=>$obj->user_firstname,
|
||||
'userlastname'=>$obj->user_lastname,
|
||||
'userphoto'=>$obj->user_photo
|
||||
);
|
||||
}
|
||||
|
||||
//if ($donetodo == 'todo') $sql.= " AND ((a.percent >= 0 AND a.percent < 100) OR (a.percent = -1 AND a.datep > '".$db->idate($now)."'))";
|
||||
//elseif ($donetodo == 'done') $sql.= " AND (a.percent = 100 OR (a.percent = -1 AND a.datep <= '".$db->idate($now)."'))";
|
||||
$tododone = '';
|
||||
if (($obj->percent >= 0 and $obj->percent < 100) || ($obj->percent == -1 && $obj->datep > $now)) {
|
||||
$tododone = 'todo';
|
||||
}
|
||||
|
||||
$histo[$numaction] = array(
|
||||
'type'=>$obj->type,
|
||||
'tododone'=>$tododone,
|
||||
'id'=>$obj->id,
|
||||
'datestart'=>$db->jdate($obj->dp),
|
||||
'dateend'=>$db->jdate($obj->dp2),
|
||||
'note'=>$obj->label,
|
||||
'message'=>$obj->message,
|
||||
'percent'=>$obj->percent,
|
||||
|
||||
'userid'=>$obj->user_id,
|
||||
'login'=>$obj->user_login,
|
||||
'userfirstname'=>$obj->user_firstname,
|
||||
'userlastname'=>$obj->user_lastname,
|
||||
'userphoto'=>$obj->user_photo,
|
||||
|
||||
'contact_id'=>$obj->fk_contact,
|
||||
'socpeopleassigned' => $contactaction->socpeopleassigned,
|
||||
'lastname'=>$obj->lastname,
|
||||
'firstname'=>$obj->firstname,
|
||||
'fk_element'=>$obj->fk_element,
|
||||
'elementtype'=>$obj->elementtype,
|
||||
// Type of event
|
||||
'acode'=>$obj->acode,
|
||||
'alabel'=>$obj->alabel,
|
||||
'libelle'=>$obj->alabel, // deprecated
|
||||
'apicto'=>$obj->apicto
|
||||
);
|
||||
} else {
|
||||
$histo[$numaction] = array(
|
||||
'type'=>$obj->type,
|
||||
'tododone'=>'done',
|
||||
'id'=>$obj->id,
|
||||
'datestart'=>$db->jdate($obj->dp),
|
||||
'dateend'=>$db->jdate($obj->dp2),
|
||||
'note'=>$obj->label,
|
||||
'message'=>$obj->message,
|
||||
'percent'=>$obj->percent,
|
||||
'acode'=>$obj->acode,
|
||||
|
||||
'userid'=>$obj->user_id,
|
||||
'login'=>$obj->user_login,
|
||||
'userfirstname'=>$obj->user_firstname,
|
||||
'userlastname'=>$obj->user_lastname,
|
||||
'userphoto'=>$obj->user_photo
|
||||
);
|
||||
$numaction++;
|
||||
$i++;
|
||||
}
|
||||
|
||||
$numaction++;
|
||||
$i++;
|
||||
} else {
|
||||
dol_print_error($db);
|
||||
}
|
||||
} else {
|
||||
dol_print_error($db);
|
||||
}
|
||||
|
||||
// Set $out to sow events
|
||||
$out = '';
|
||||
|
||||
if (empty($conf->agenda->enabled)) {
|
||||
$langs->loadLangs(array("admin", "errors"));
|
||||
$out = info_admin($langs->trans("WarningModuleXDisabledSoYouMayMissEventHere", $langs->transnoentitiesnoconv("Module2400Name")), 0, 0, 'warning');
|
||||
}
|
||||
|
||||
if (!empty($conf->agenda->enabled) || (!empty($conf->mailing->enabled) && !empty($objcon->email))) {
|
||||
|
||||
@ -1145,8 +1145,9 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM
|
||||
$langs->load("salaries");
|
||||
$newmenu->add("/salaries/list.php?leftmenu=tax_salary&mainmenu=billing", $langs->trans("Salaries"), 0, $user->rights->salaries->read, '', $mainmenu, 'tax_salary', 0, '', '', '', img_picto('', 'salary', 'class="paddingright pictofixedwidth"'));
|
||||
if ($usemenuhider || empty($leftmenu) || preg_match('/^tax_salary/i', $leftmenu)) {
|
||||
$newmenu->add("/salaries/card.php?leftmenu=tax_salary&action=create", $langs->trans("NewPayment"), 1, $user->rights->salaries->write);
|
||||
$newmenu->add("/salaries/list.php?leftmenu=tax_salary", $langs->trans("Payments"), 1, $user->rights->salaries->read);
|
||||
$newmenu->add("/salaries/card.php?leftmenu=tax_salary&action=create", $langs->trans("New"), 1, $user->rights->salaries->write);
|
||||
$newmenu->add("/salaries/list.php?leftmenu=tax_salary", $langs->trans("List"), 1, $user->rights->salaries->read);
|
||||
$newmenu->add("/salaries/payments.php?leftmenu=tax_salary", $langs->trans("Payments"), 1, $user->rights->salaries->read);
|
||||
$newmenu->add("/salaries/stats/index.php?leftmenu=tax_salary", $langs->trans("Statistics"), 1, $user->rights->salaries->read);
|
||||
}
|
||||
}
|
||||
|
||||
@ -97,7 +97,7 @@ class mod_barcode_product_standard extends ModeleNumRefBarCode
|
||||
$texte .= '<table class="nobordernopadding" width="100%">';
|
||||
|
||||
$tooltip = $langs->trans("GenericMaskCodes", $langs->transnoentities("BarCode"), $langs->transnoentities("BarCode"));
|
||||
$tooltip .= $langs->trans("GenericMaskCodes3");
|
||||
$tooltip .= $langs->trans("GenericMaskCodes3EAN");
|
||||
$tooltip .= '<strong>'.$langs->trans("Example").':</strong><br>';
|
||||
$tooltip .= '020{000000000}? (for internal use)<br>';
|
||||
$tooltip .= '9771234{00000}? (example of ISSN code with prefix 1234)<br>';
|
||||
|
||||
@ -449,7 +449,7 @@ class doc_generic_shipment_odt extends ModelePdfExpedition
|
||||
}
|
||||
|
||||
// Replace tags of object + external modules
|
||||
$tmparray = $this->get_substitutionarray_shipment($object, $outputlangs);
|
||||
$tmparray = array_merge($tmparray, $this->get_substitutionarray_shipment($object, $outputlangs));
|
||||
|
||||
complete_substitutions_array($tmparray, $outputlangs, $object);
|
||||
// Call the ODTSubstitution hook
|
||||
|
||||
@ -161,6 +161,7 @@ class MailingTargets // This can't be abstract as it is used for some method
|
||||
public function addTargetsToDatabase($mailing_id, $cibles)
|
||||
{
|
||||
global $conf;
|
||||
global $dolibarr_main_instance_unique_id;
|
||||
|
||||
$this->db->begin();
|
||||
|
||||
@ -183,7 +184,7 @@ class MailingTargets // This can't be abstract as it is used for some method
|
||||
$sql .= "'".$this->db->escape($targetarray['other'])."',";
|
||||
$sql .= "'".$this->db->escape($targetarray['source_url'])."',";
|
||||
$sql .= (empty($targetarray['source_id']) ? 'null' : "'".$this->db->escape($targetarray['source_id'])."'").",";
|
||||
$sql .= "'".$this->db->escape(dol_hash($targetarray['email'].';'.$targetarray['lastname'].';'.$mailing_id.';'.$conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY))."',";
|
||||
$sql .= "'".$this->db->escape(dol_hash($dolibarr_main_instance_unique_id.';'.$targetarray['email'].';'.$targetarray['lastname'].';'.$mailing_id.';'.$conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY), 'md5')."',";
|
||||
$sql .= "'".$this->db->escape($targetarray['source_type'])."')";
|
||||
dol_syslog(__METHOD__, LOG_DEBUG);
|
||||
$result = $this->db->query($sql);
|
||||
|
||||
@ -85,6 +85,7 @@ class modLdap extends DolibarrModules
|
||||
11=>array('LDAP_FIELD_PHONE', 'chaine', 'telephonenumber', '', 0),
|
||||
12=>array('LDAP_FIELD_FAX', 'chaine', 'facsimiletelephonenumber', '', 0),
|
||||
13=>array('LDAP_FIELD_MOBILE', 'chaine', 'mobile', '', 0),
|
||||
14=>array('LDAP_GROUP_FILTER', 'chaine', '&(objectClass=groupOfNames)', '', 0),
|
||||
);
|
||||
|
||||
// Boxes
|
||||
|
||||
@ -587,7 +587,7 @@ class modProduct extends DolibarrModules
|
||||
));
|
||||
|
||||
$this->import_regex_array[$r] = array_merge($this->import_regex_array[$r], array(
|
||||
'p.tobatch' => '^[0|1]$'
|
||||
'p.tobatch' => '^[0|1|2]$'
|
||||
));
|
||||
|
||||
$this->import_convertvalue_array[$r] = array_merge($this->import_convertvalue_array[$r], array(
|
||||
@ -679,7 +679,7 @@ class modProduct extends DolibarrModules
|
||||
//clauses copied from import_fields_array
|
||||
if (!empty($conf->stock->enabled)) {
|
||||
$import_sample = array_merge($import_sample, array(
|
||||
'p.tobatch'=>"0 (don't use) / 1 (use batch/serial number)",
|
||||
'p.tobatch'=>"0 (don't use) / 1 (use batch) / 2 (use serial number)",
|
||||
'p.seuil_stock_alerte' => '',
|
||||
'p.pmp' => '0',
|
||||
'p.desiredstock' => ''
|
||||
|
||||
@ -201,14 +201,23 @@ if (empty($reshook) && is_array($extrafields->attributes[$object->table_element]
|
||||
print '<td id="'.$html_id.'" class="valuefield '.$object->element.'_extras_'.$tmpkeyextra.' wordbreak"'.(!empty($cols) ? ' colspan="'.$cols.'"' : '').'>';
|
||||
|
||||
// Convert date into timestamp format
|
||||
if (in_array($extrafields->attributes[$object->table_element]['type'][$tmpkeyextra], array('date', 'datetime'))) {
|
||||
if (in_array($extrafields->attributes[$object->table_element]['type'][$tmpkeyextra], array('date'))) {
|
||||
$datenotinstring = $object->array_options['options_'.$tmpkeyextra];
|
||||
// print 'X'.$object->array_options['options_' . $tmpkeyextra].'-'.$datenotinstring.'x';
|
||||
if (!is_numeric($object->array_options['options_'.$tmpkeyextra])) { // For backward compatibility
|
||||
$datenotinstring = $db->jdate($datenotinstring);
|
||||
}
|
||||
//print 'x'.$object->array_options['options_' . $tmpkeyextra].'-'.$datenotinstring.' - '.dol_print_date($datenotinstring, 'dayhour');
|
||||
$value = GETPOSTISSET("options_".$tmpkeyextra) ? dol_mktime(GETPOST("options_".$tmpkeyextra."hour", 'int'), GETPOST("options_".$tmpkeyextra."min", 'int'), 0, GETPOST("options_".$tmpkeyextra."month", 'int'), GETPOST("options_".$tmpkeyextra."day", 'int'), GETPOST("options_".$tmpkeyextra."year", 'int')) : $datenotinstring;
|
||||
$value = GETPOSTISSET("options_".$tmpkeyextra) ? dol_mktime(12, 0, 0, GETPOST("options_".$tmpkeyextra."month", 'int'), GETPOST("options_".$tmpkeyextra."day", 'int'), GETPOST("options_".$tmpkeyextra."year", 'int')) : $datenotinstring;
|
||||
}
|
||||
if (in_array($extrafields->attributes[$object->table_element]['type'][$tmpkeyextra], array('datetime'))) {
|
||||
$datenotinstring = $object->array_options['options_'.$tmpkeyextra];
|
||||
// print 'X'.$object->array_options['options_' . $tmpkeyextra].'-'.$datenotinstring.'x';
|
||||
if (!is_numeric($object->array_options['options_'.$tmpkeyextra])) { // For backward compatibility
|
||||
$datenotinstring = $db->jdate($datenotinstring);
|
||||
}
|
||||
//print 'x'.$object->array_options['options_' . $tmpkeyextra].'-'.$datenotinstring.' - '.dol_print_date($datenotinstring, 'dayhour');
|
||||
$value = GETPOSTISSET("options_".$tmpkeyextra) ? dol_mktime(GETPOST("options_".$tmpkeyextra."hour", 'int'), GETPOST("options_".$tmpkeyextra."min", 'int'), GETPOST("options_".$tmpkeyextra."sec", 'int'), GETPOST("options_".$tmpkeyextra."month", 'int'), GETPOST("options_".$tmpkeyextra."day", 'int'), GETPOST("options_".$tmpkeyextra."year", 'int'), 'tzuserrel') : $datenotinstring;
|
||||
}
|
||||
|
||||
//TODO Improve element and rights detection
|
||||
|
||||
@ -104,10 +104,12 @@ if (($line->info_bits & 2) == 2) {
|
||||
print '</a>';
|
||||
if ($line->description) {
|
||||
if ($line->description == '(CREDIT_NOTE)' && $line->fk_remise_except > 0) {
|
||||
include_once DOL_DOCUMENT_ROOT.'/core/class/discount.class.php';
|
||||
$discount = new DiscountAbsolute($this->db);
|
||||
$discount->fetch($line->fk_remise_except);
|
||||
print ($txt ? ' - ' : '').$langs->transnoentities("DiscountFromCreditNote", $discount->getNomUrl(0));
|
||||
} elseif ($line->description == '(DEPOSIT)' && $line->fk_remise_except > 0) {
|
||||
} elseif ($line->description == '(DEPOSIT)' && $line->fk_remise_except > 0) {
|
||||
include_once DOL_DOCUMENT_ROOT.'/core/class/discount.class.php';
|
||||
$discount = new DiscountAbsolute($this->db);
|
||||
$discount->fetch($line->fk_remise_except);
|
||||
print ($txt ? ' - ' : '').$langs->transnoentities("DiscountFromDeposit", $discount->getNomUrl(0));
|
||||
@ -115,11 +117,13 @@ if (($line->info_bits & 2) == 2) {
|
||||
if (!empty($conf->global->INVOICE_ADD_DEPOSIT_DATE)) {
|
||||
print ' ('.dol_print_date($discount->datec).')';
|
||||
}
|
||||
} elseif ($line->description == '(EXCESS RECEIVED)' && $objp->fk_remise_except > 0) {
|
||||
} elseif ($line->description == '(EXCESS RECEIVED)' && $objp->fk_remise_except > 0) {
|
||||
include_once DOL_DOCUMENT_ROOT.'/core/class/discount.class.php';
|
||||
$discount = new DiscountAbsolute($this->db);
|
||||
$discount->fetch($line->fk_remise_except);
|
||||
print ($txt ? ' - ' : '').$langs->transnoentities("DiscountFromExcessReceived", $discount->getNomUrl(0));
|
||||
} elseif ($line->description == '(EXCESS PAID)' && $objp->fk_remise_except > 0) {
|
||||
include_once DOL_DOCUMENT_ROOT.'/core/class/discount.class.php';
|
||||
$discount = new DiscountAbsolute($this->db);
|
||||
$discount->fetch($line->fk_remise_except);
|
||||
print ($txt ? ' - ' : '').$langs->transnoentities("DiscountFromExcessPaid", $discount->getNomUrl(0));
|
||||
|
||||
@ -545,13 +545,13 @@ if ($num > 0) {
|
||||
|
||||
print '<td class="center">';
|
||||
if (!empty($obj->datestart)) {
|
||||
print dol_print_date($db->jdate($obj->datestart), 'dayhour');
|
||||
print dol_print_date($db->jdate($obj->datestart), 'dayhour', 'tzserver');
|
||||
}
|
||||
print '</td>';
|
||||
|
||||
print '<td class="center">';
|
||||
if (!empty($obj->dateend)) {
|
||||
print dol_print_date($db->jdate($obj->dateend), 'dayhour');
|
||||
print dol_print_date($db->jdate($obj->dateend), 'dayhour', 'tzserver');
|
||||
}
|
||||
print '</td>';
|
||||
|
||||
@ -569,7 +569,7 @@ if ($num > 0) {
|
||||
// Date start last run
|
||||
print '<td class="center">';
|
||||
if (!empty($datelastrun)) {
|
||||
print dol_print_date($datelastrun, 'dayhoursec');
|
||||
print dol_print_date($datelastrun, 'dayhoursec', 'tzserver');
|
||||
}
|
||||
print '</td>';
|
||||
|
||||
|
||||
@ -24,13 +24,13 @@
|
||||
|
||||
// Put here all includes required by your class file
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
|
||||
//require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT . '/comm/action/class/actioncomm.class.php';
|
||||
//require_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php';
|
||||
|
||||
/**
|
||||
* Class for ConferenceOrBooth
|
||||
*/
|
||||
class ConferenceOrBooth extends CommonObject
|
||||
class ConferenceOrBooth extends ActionComm
|
||||
{
|
||||
/**
|
||||
* @var string ID of module.
|
||||
@ -65,8 +65,11 @@ class ConferenceOrBooth extends CommonObject
|
||||
|
||||
|
||||
const STATUS_DRAFT = 0;
|
||||
const STATUS_VALIDATED = 1;
|
||||
const STATUS_CANCELED = 9;
|
||||
const STATUS_SUGGESTED = 1;
|
||||
const STATUS_CONFIRMED = 2;
|
||||
const STATUS_NOT_QUALIFIED = 3;
|
||||
const STATUS_DONE = 4;
|
||||
const STATUS_CANCELED = -1;
|
||||
|
||||
|
||||
/**
|
||||
@ -100,82 +103,35 @@ class ConferenceOrBooth extends CommonObject
|
||||
* @var array Array with all fields and their property. Do not use it as a static var. It may be modified by constructor.
|
||||
*/
|
||||
public $fields=array(
|
||||
'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>0, 'noteditable'=>'1', 'index'=>1, 'css'=>'left', 'comment'=>"Id"),
|
||||
'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>'1', 'position'=>10, 'notnull'=>1, 'visible'=>4, 'noteditable'=>'1', 'default'=>'(PROV)', 'index'=>1, 'searchall'=>1, 'showoncombobox'=>'1', 'comment'=>"Reference of object"),
|
||||
'id' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>0, 'noteditable'=>'1', 'index'=>1, 'css'=>'left', 'comment'=>"Id"),
|
||||
'ref' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>0, 'noteditable'=>'1', 'index'=>1, 'css'=>'left', 'comment'=>"Id"),
|
||||
'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>'1', 'position'=>30, 'notnull'=>0, 'visible'=>1, 'searchall'=>1, 'css'=>'minwidth300', 'help'=>"Help text", 'showoncombobox'=>'1',),
|
||||
//'amount' => array('type'=>'price', 'label'=>'Amount', 'enabled'=>'1', 'position'=>40, 'notnull'=>0, 'visible'=>1, 'default'=>'null', 'isameasure'=>'1', 'help'=>"Help text for amount",),
|
||||
//'qty' => array('type'=>'real', 'label'=>'Qty', 'enabled'=>'1', 'position'=>45, 'notnull'=>0, 'visible'=>1, 'default'=>'0', 'isameasure'=>'1', 'css'=>'maxwidth75imp', 'help'=>"Help text for quantity",),
|
||||
'fk_soc' => array('type'=>'integer:Societe:societe/class/societe.class.php:1:status=1 AND entity IN (__SHARED_ENTITIES__)', 'label'=>'ThirdParty', 'enabled'=>'1', 'position'=>50, 'notnull'=>-1, 'visible'=>1, 'index'=>1, 'help'=>"LinkToThirparty",),
|
||||
'fk_project' => array('type'=>'integer:Project:projet/class/project.class.php:1', 'label'=>'Project', 'enabled'=>'1', 'position'=>52, 'notnull'=>-1, 'visible'=>-1, 'index'=>1,),
|
||||
'description' => array('type'=>'text', 'label'=>'Description', 'enabled'=>'1', 'position'=>60, 'notnull'=>0, 'visible'=>3,),
|
||||
'note_public' => array('type'=>'html', 'label'=>'NotePublic', 'enabled'=>'1', 'position'=>61, 'notnull'=>0, 'visible'=>0,),
|
||||
'note_private' => array('type'=>'html', 'label'=>'NotePrivate', 'enabled'=>'1', 'position'=>62, 'notnull'=>0, 'visible'=>0,),
|
||||
'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>'1', 'position'=>500, 'notnull'=>1, 'visible'=>-2,),
|
||||
'note' => array('type'=>'text', 'label'=>'Description', 'enabled'=>'1', 'position'=>60, 'notnull'=>0, 'visible'=>1,),
|
||||
'fk_action' => array('type'=>'sellist:c_actioncomm:label:rowid::module LIKE (\'conference\',\'booth\'))', 'label'=>'Format', 'enabled'=>'1', 'position'=>60, 'notnull'=>1, 'visible'=>1,),
|
||||
'datec' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>'1', 'position'=>500, 'notnull'=>1, 'visible'=>-2,),
|
||||
'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>'1', 'position'=>501, 'notnull'=>0, 'visible'=>-2,),
|
||||
'fk_user_creat' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserAuthor', 'enabled'=>'1', 'position'=>510, 'notnull'=>1, 'visible'=>-2, 'foreignkey'=>'user.rowid',),
|
||||
'fk_user_modif' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserModif', 'enabled'=>'1', 'position'=>511, 'notnull'=>-1, 'visible'=>-2,),
|
||||
'last_main_doc' => array('type'=>'varchar(255)', 'label'=>'LastMainDoc', 'enabled'=>'1', 'position'=>600, 'notnull'=>0, 'visible'=>0,),
|
||||
'fk_user_author' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserAuthor', 'enabled'=>'1', 'position'=>510, 'notnull'=>1, 'visible'=>-2, 'foreignkey'=>'user.rowid',),
|
||||
'fk_user_mod' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserModif', 'enabled'=>'1', 'position'=>511, 'notnull'=>-1, 'visible'=>-2,),
|
||||
'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>'1', 'position'=>1000, 'notnull'=>-1, 'visible'=>-2,),
|
||||
'model_pdf' => array('type'=>'varchar(255)', 'label'=>'Model pdf', 'enabled'=>'1', 'position'=>1010, 'notnull'=>-1, 'visible'=>0,),
|
||||
'status' => array('type'=>'smallint', 'label'=>'Status', 'enabled'=>'1', 'position'=>1000, 'notnull'=>1, 'visible'=>1, 'index'=>1, 'arrayofkeyval'=>array('0'=>'Brouillon', '1'=>'Validé', '9'=>'Annulé'),),
|
||||
);
|
||||
public $rowid;
|
||||
public $ref;
|
||||
public $id;
|
||||
public $label;
|
||||
public $amount;
|
||||
public $qty;
|
||||
public $fk_soc;
|
||||
public $fk_project;
|
||||
public $description;
|
||||
public $note_public;
|
||||
public $note_private;
|
||||
public $date_creation;
|
||||
public $note;
|
||||
public $fk_action;
|
||||
public $datec;
|
||||
public $tms;
|
||||
public $fk_user_creat;
|
||||
public $fk_user_modif;
|
||||
public $last_main_doc;
|
||||
public $fk_user_author;
|
||||
public $fk_user_mod;
|
||||
public $import_key;
|
||||
public $model_pdf;
|
||||
public $status;
|
||||
// END MODULEBUILDER PROPERTIES
|
||||
|
||||
|
||||
// If this object has a subtable with lines
|
||||
|
||||
// /**
|
||||
// * @var string Name of subtable line
|
||||
// */
|
||||
// public $table_element_line = 'eventorganization_conferenceorboothline';
|
||||
|
||||
// /**
|
||||
// * @var string Field with ID of parent key if this object has a parent
|
||||
// */
|
||||
// public $fk_element = 'fk_conferenceorbooth';
|
||||
|
||||
// /**
|
||||
// * @var string Name of subtable class that manage subtable lines
|
||||
// */
|
||||
// public $class_element_line = 'ConferenceOrBoothline';
|
||||
|
||||
// /**
|
||||
// * @var array List of child tables. To test if we can delete object.
|
||||
// */
|
||||
// protected $childtables = array();
|
||||
|
||||
// /**
|
||||
// * @var array List of child tables. To know object to delete on cascade.
|
||||
// * If name matches '@ClassNAme:FilePathClass;ParentFkFieldName' it will
|
||||
// * call method deleteByParentField(parentId, ParentFkFieldName) to fetch and delete child object
|
||||
// */
|
||||
// protected $childtablesoncascade = array('eventorganization_conferenceorboothdet');
|
||||
|
||||
// /**
|
||||
// * @var ConferenceOrBoothLine[] Array of subtable lines
|
||||
// */
|
||||
// public $lines = array();
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
@ -188,7 +144,7 @@ class ConferenceOrBooth extends CommonObject
|
||||
$this->db = $db;
|
||||
|
||||
if (empty($conf->global->MAIN_SHOW_TECHNICAL_ID) && isset($this->fields['rowid'])) {
|
||||
$this->fields['rowid']['visible'] = 0;
|
||||
$this->fields['id']['visible'] = 0;
|
||||
}
|
||||
if (empty($conf->multicompany->enabled) && isset($this->fields['entity'])) {
|
||||
$this->fields['entity']['enabled'] = 0;
|
||||
@ -228,105 +184,22 @@ class ConferenceOrBooth extends CommonObject
|
||||
*/
|
||||
public function create(User $user, $notrigger = false)
|
||||
{
|
||||
return $this->createCommon($user, $notrigger);
|
||||
$this->setPercentageFromStatus();
|
||||
return parent::create($user, $notrigger);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clone an object into another one
|
||||
* Set Percentage from status
|
||||
*
|
||||
* @param User $user User that creates
|
||||
* @param int $fromid Id of object to clone
|
||||
* @return mixed New object created, <0 if KO
|
||||
* @return void
|
||||
*/
|
||||
public function createFromClone(User $user, $fromid)
|
||||
public function setPercentageFromStatus()
|
||||
{
|
||||
global $langs, $extrafields;
|
||||
$error = 0;
|
||||
|
||||
dol_syslog(__METHOD__, LOG_DEBUG);
|
||||
|
||||
$object = new self($this->db);
|
||||
|
||||
$this->db->begin();
|
||||
|
||||
// Load source object
|
||||
$result = $object->fetchCommon($fromid);
|
||||
if ($result > 0 && !empty($object->table_element_line)) {
|
||||
$object->fetchLines();
|
||||
if ($this->status==self::STATUS_DONE) {
|
||||
$this->percentage=100;
|
||||
}
|
||||
|
||||
// get lines so they will be clone
|
||||
//foreach($this->lines as $line)
|
||||
// $line->fetch_optionals();
|
||||
|
||||
// Reset some properties
|
||||
unset($object->id);
|
||||
unset($object->fk_user_creat);
|
||||
unset($object->import_key);
|
||||
|
||||
// Clear fields
|
||||
if (property_exists($object, 'ref')) {
|
||||
$object->ref = empty($this->fields['ref']['default']) ? "Copy_Of_".$object->ref : $this->fields['ref']['default'];
|
||||
}
|
||||
if (property_exists($object, 'label')) {
|
||||
$object->label = empty($this->fields['label']['default']) ? $langs->trans("CopyOf")." ".$object->label : $this->fields['label']['default'];
|
||||
}
|
||||
if (property_exists($object, 'status')) {
|
||||
$object->status = self::STATUS_DRAFT;
|
||||
}
|
||||
if (property_exists($object, 'date_creation')) {
|
||||
$object->date_creation = dol_now();
|
||||
}
|
||||
if (property_exists($object, 'date_modification')) {
|
||||
$object->date_modification = null;
|
||||
}
|
||||
// ...
|
||||
// Clear extrafields that are unique
|
||||
if (is_array($object->array_options) && count($object->array_options) > 0) {
|
||||
$extrafields->fetch_name_optionals_label($this->table_element);
|
||||
foreach ($object->array_options as $key => $option) {
|
||||
$shortkey = preg_replace('/options_/', '', $key);
|
||||
if (!empty($extrafields->attributes[$this->table_element]['unique'][$shortkey])) {
|
||||
//var_dump($key); var_dump($clonedObj->array_options[$key]); exit;
|
||||
unset($object->array_options[$key]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Create clone
|
||||
$object->context['createfromclone'] = 'createfromclone';
|
||||
$result = $object->createCommon($user);
|
||||
if ($result < 0) {
|
||||
$error++;
|
||||
$this->error = $object->error;
|
||||
$this->errors = $object->errors;
|
||||
}
|
||||
|
||||
if (!$error) {
|
||||
// copy internal contacts
|
||||
if ($this->copy_linked_contact($object, 'internal') < 0) {
|
||||
$error++;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$error) {
|
||||
// copy external contacts if same company
|
||||
if (property_exists($this, 'socid') && $this->socid == $object->socid) {
|
||||
if ($this->copy_linked_contact($object, 'external') < 0) {
|
||||
$error++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unset($object->context['createfromclone']);
|
||||
|
||||
// End
|
||||
if (!$error) {
|
||||
$this->db->commit();
|
||||
return $object;
|
||||
} else {
|
||||
$this->db->rollback();
|
||||
return -1;
|
||||
if ($this->status==self::STATUS_DRAFT) {
|
||||
$this->percentage=0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -339,27 +212,10 @@ class ConferenceOrBooth extends CommonObject
|
||||
*/
|
||||
public function fetch($id, $ref = null)
|
||||
{
|
||||
$result = $this->fetchCommon($id, $ref);
|
||||
if ($result > 0 && !empty($this->table_element_line)) {
|
||||
$this->fetchLines();
|
||||
}
|
||||
$result = parent::fetch($id, $ref);
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load object lines in memory from the database
|
||||
*
|
||||
* @return int <0 if KO, 0 if not found, >0 if OK
|
||||
*/
|
||||
public function fetchLines()
|
||||
{
|
||||
$this->lines = array();
|
||||
|
||||
$result = $this->fetchLinesCommon();
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Load list of objects in memory from the database.
|
||||
*
|
||||
@ -373,6 +229,8 @@ class ConferenceOrBooth extends CommonObject
|
||||
*/
|
||||
public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND')
|
||||
{
|
||||
|
||||
//TODO set percent according status
|
||||
global $conf;
|
||||
|
||||
dol_syslog(__METHOD__, LOG_DEBUG);
|
||||
@ -391,7 +249,7 @@ class ConferenceOrBooth extends CommonObject
|
||||
$sqlwhere = array();
|
||||
if (count($filter) > 0) {
|
||||
foreach ($filter as $key => $value) {
|
||||
if ($key == 't.rowid') {
|
||||
if ($key == 't.id') {
|
||||
$sqlwhere[] = $key.'='.$value;
|
||||
} elseif (in_array($this->fields[$key]['type'], array('date', 'datetime', 'timestamp'))) {
|
||||
$sqlwhere[] = $key.' = \''.$this->db->idate($value).'\'';
|
||||
@ -449,7 +307,8 @@ class ConferenceOrBooth extends CommonObject
|
||||
*/
|
||||
public function update(User $user, $notrigger = false)
|
||||
{
|
||||
return $this->updateCommon($user, $notrigger);
|
||||
$this->setPercentageFromStatus();
|
||||
return parent::update($user, $notrigger);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -461,29 +320,10 @@ class ConferenceOrBooth extends CommonObject
|
||||
*/
|
||||
public function delete(User $user, $notrigger = false)
|
||||
{
|
||||
return $this->deleteCommon($user, $notrigger);
|
||||
//return $this->deleteCommon($user, $notrigger, 1);
|
||||
//TODO delete attendees and subscription
|
||||
return parent::delete($notrigger);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a line of object in database
|
||||
*
|
||||
* @param User $user User that delete
|
||||
* @param int $idline Id of line to delete
|
||||
* @param bool $notrigger false=launch triggers after, true=disable triggers
|
||||
* @return int >0 if OK, <0 if KO
|
||||
*/
|
||||
public function deleteLine(User $user, $idline, $notrigger = false)
|
||||
{
|
||||
if ($this->status < 0) {
|
||||
$this->error = 'ErrorDeleteLineNotAllowedByObjectStatus';
|
||||
return -2;
|
||||
}
|
||||
|
||||
return $this->deleteLineCommon($user, $idline, $notrigger);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Validate object
|
||||
*
|
||||
@ -505,55 +345,28 @@ class ConferenceOrBooth extends CommonObject
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*if (! ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->eventorganization->conferenceorbooth->write))
|
||||
|| (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->eventorganization->conferenceorbooth->conferenceorbooth_advance->validate))))
|
||||
{
|
||||
$this->error='NotEnoughPermissions';
|
||||
dol_syslog(get_class($this)."::valid ".$this->error, LOG_ERR);
|
||||
return -1;
|
||||
}*/
|
||||
|
||||
$now = dol_now();
|
||||
|
||||
$this->db->begin();
|
||||
|
||||
// Define new ref
|
||||
if (!$error && (preg_match('/^[\(]?PROV/i', $this->ref) || empty($this->ref))) { // empty should not happened, but when it occurs, the test save life
|
||||
$num = $this->getNextNumRef();
|
||||
} else {
|
||||
$num = $this->ref;
|
||||
// Validate
|
||||
$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
|
||||
$sql .= " status = ".self::STATUS_CONFIRMED;
|
||||
$sql .= " WHERE id = ".$this->id;
|
||||
|
||||
dol_syslog(get_class($this)."::validate()", LOG_DEBUG);
|
||||
$resql = $this->db->query($sql);
|
||||
if (!$resql) {
|
||||
dol_print_error($this->db);
|
||||
$this->error = $this->db->lasterror();
|
||||
$error++;
|
||||
}
|
||||
$this->newref = $num;
|
||||
|
||||
if (!empty($num)) {
|
||||
// Validate
|
||||
$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
|
||||
$sql .= " SET ref = '".$this->db->escape($num)."',";
|
||||
$sql .= " status = ".self::STATUS_VALIDATED;
|
||||
if (!empty($this->fields['date_validation'])) {
|
||||
$sql .= ", date_validation = '".$this->db->idate($now)."'";
|
||||
}
|
||||
if (!empty($this->fields['fk_user_valid'])) {
|
||||
$sql .= ", fk_user_valid = ".$user->id;
|
||||
}
|
||||
$sql .= " WHERE rowid = ".$this->id;
|
||||
|
||||
dol_syslog(get_class($this)."::validate()", LOG_DEBUG);
|
||||
$resql = $this->db->query($sql);
|
||||
if (!$resql) {
|
||||
dol_print_error($this->db);
|
||||
$this->error = $this->db->lasterror();
|
||||
$error++;
|
||||
}
|
||||
|
||||
if (!$error && !$notrigger) {
|
||||
// Call trigger
|
||||
$result = $this->call_trigger('CONFERENCEORBOOTH_VALIDATE', $user);
|
||||
if ($result < 0) {
|
||||
$error++;
|
||||
}
|
||||
// End call triggers
|
||||
}
|
||||
if (!$error && !$notrigger) {
|
||||
// Call trigger
|
||||
$result = $this->call_trigger('CONFERENCEORBOOTH_VALIDATE', $user);
|
||||
if ($result < 0) $error++;
|
||||
// End call triggers
|
||||
}
|
||||
|
||||
if (!$error) {
|
||||
@ -565,9 +378,7 @@ class ConferenceOrBooth extends CommonObject
|
||||
$sql = 'UPDATE '.MAIN_DB_PREFIX."ecm_files set filename = CONCAT('".$this->db->escape($this->newref)."', SUBSTR(filename, ".(strlen($this->ref) + 1).")), filepath = 'conferenceorbooth/".$this->db->escape($this->newref)."'";
|
||||
$sql .= " WHERE filename LIKE '".$this->db->escape($this->ref)."%' AND filepath = 'conferenceorbooth/".$this->db->escape($this->ref)."' and entity = ".$conf->entity;
|
||||
$resql = $this->db->query($sql);
|
||||
if (!$resql) {
|
||||
$error++; $this->error = $this->db->lasterror();
|
||||
}
|
||||
if (!$resql) { $error++; $this->error = $this->db->lasterror(); }
|
||||
|
||||
// We rename directory ($this->ref = old ref, $num = new ref) in order not to lose the attachments
|
||||
$oldref = dol_sanitizeFileName($this->ref);
|
||||
@ -596,7 +407,7 @@ class ConferenceOrBooth extends CommonObject
|
||||
// Set new ref and current status
|
||||
if (!$error) {
|
||||
$this->ref = $num;
|
||||
$this->status = self::STATUS_VALIDATED;
|
||||
$this->status = self::STATUS_CONFIRMED;
|
||||
}
|
||||
|
||||
if (!$error) {
|
||||
@ -643,7 +454,7 @@ class ConferenceOrBooth extends CommonObject
|
||||
public function cancel($user, $notrigger = 0)
|
||||
{
|
||||
// Protection
|
||||
if ($this->status != self::STATUS_VALIDATED) {
|
||||
if ($this->status != self::STATUS_CONFIRMED) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -678,7 +489,7 @@ class ConferenceOrBooth extends CommonObject
|
||||
return -1;
|
||||
}*/
|
||||
|
||||
return $this->setStatusCommon($user, self::STATUS_VALIDATED, $notrigger, 'CONFERENCEORBOOTH_REOPEN');
|
||||
return $this->setStatusCommon($user, self::STATUS_CONFIRMED, $notrigger, 'CONFERENCEORBOOTH_REOPEN');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -706,7 +517,7 @@ class ConferenceOrBooth extends CommonObject
|
||||
$label .= ' '.$this->getLibStatut(5);
|
||||
}
|
||||
$label .= '<br>';
|
||||
$label .= '<b>'.$langs->trans('Ref').':</b> '.$this->ref;
|
||||
$label .= '<b>'.$langs->trans('Ref').':</b> '.$this->id;
|
||||
|
||||
$url = dol_buildpath('/eventorganization/conferenceorbooth_card.php', 1).'?id='.$this->id;
|
||||
|
||||
@ -814,11 +625,17 @@ class ConferenceOrBooth extends CommonObject
|
||||
global $langs;
|
||||
//$langs->load("eventorganization@eventorganization");
|
||||
$this->labelStatus[self::STATUS_DRAFT] = $langs->trans('Draft');
|
||||
$this->labelStatus[self::STATUS_VALIDATED] = $langs->trans('Enabled');
|
||||
$this->labelStatus[self::STATUS_CANCELED] = $langs->trans('Disabled');
|
||||
$this->labelStatus[self::STATUS_SUGGESTED] = $langs->trans('Suggested');
|
||||
$this->labelStatus[self::STATUS_CONFIRMED] = $langs->trans('Confirmed');
|
||||
$this->labelStatus[self::STATUS_NOTSELECTED] = $langs->trans('NotSelected');
|
||||
$this->labelStatus[self::STATUS_DONE] = $langs->trans('Done');
|
||||
$this->labelStatus[self::STATUS_CANCELED] = $langs->trans('Canceled');
|
||||
$this->labelStatusShort[self::STATUS_DRAFT] = $langs->trans('Draft');
|
||||
$this->labelStatusShort[self::STATUS_VALIDATED] = $langs->trans('Enabled');
|
||||
$this->labelStatusShort[self::STATUS_CANCELED] = $langs->trans('Disabled');
|
||||
$this->labelStatusShort[self::STATUS_SUGGESTED] = $langs->trans('Suggested');
|
||||
$this->labelStatusShort[self::STATUS_CONFIRMED] = $langs->trans('Confirmed');
|
||||
$this->labelStatusShort[self::STATUS_NOTSELECTED] = $langs->trans('NotSelected');
|
||||
$this->labelStatusShort[self::STATUS_DONE] = $langs->trans('Done');
|
||||
$this->labelStatusShort[self::STATUS_CANCELED] = $langs->trans('Canceled');
|
||||
}
|
||||
|
||||
$statusType = 'status'.$status;
|
||||
@ -838,10 +655,10 @@ class ConferenceOrBooth extends CommonObject
|
||||
*/
|
||||
public function info($id)
|
||||
{
|
||||
$sql = 'SELECT rowid, date_creation as datec, tms as datem,';
|
||||
$sql .= ' fk_user_creat, fk_user_modif';
|
||||
$sql = 'SELECT rowid, datec as datec, tms as datem,';
|
||||
$sql .= ' fk_user_author, fk_user_mod';
|
||||
$sql .= ' FROM '.MAIN_DB_PREFIX.$this->table_element.' as t';
|
||||
$sql .= ' WHERE t.rowid = '.$id;
|
||||
$sql .= ' WHERE t.id = '.$id;
|
||||
$result = $this->db->query($sql);
|
||||
if ($result) {
|
||||
if ($this->db->num_rows($result)) {
|
||||
@ -853,21 +670,8 @@ class ConferenceOrBooth extends CommonObject
|
||||
$this->user_creation = $cuser;
|
||||
}
|
||||
|
||||
if ($obj->fk_user_valid) {
|
||||
$vuser = new User($this->db);
|
||||
$vuser->fetch($obj->fk_user_valid);
|
||||
$this->user_validation = $vuser;
|
||||
}
|
||||
|
||||
if ($obj->fk_user_cloture) {
|
||||
$cluser = new User($this->db);
|
||||
$cluser->fetch($obj->fk_user_cloture);
|
||||
$this->user_cloture = $cluser;
|
||||
}
|
||||
|
||||
$this->date_creation = $this->db->jdate($obj->datec);
|
||||
$this->date_modification = $this->db->jdate($obj->datem);
|
||||
$this->date_validation = $this->db->jdate($obj->datev);
|
||||
}
|
||||
|
||||
$this->db->free($result);
|
||||
@ -909,61 +713,6 @@ class ConferenceOrBooth extends CommonObject
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the reference to the following non used object depending on the active numbering module.
|
||||
*
|
||||
* @return string Object free reference
|
||||
*/
|
||||
public function getNextNumRef()
|
||||
{
|
||||
global $langs, $conf;
|
||||
$langs->load("eventorganization@eventorganization");
|
||||
|
||||
if (empty($conf->global->EVENTORGANIZATION_CONFERENCEORBOOTH_ADDON)) {
|
||||
$conf->global->EVENTORGANIZATION_CONFERENCEORBOOTH_ADDON = 'mod_conferenceorbooth_standard';
|
||||
}
|
||||
|
||||
if (!empty($conf->global->EVENTORGANIZATION_CONFERENCEORBOOTH_ADDON)) {
|
||||
$mybool = false;
|
||||
|
||||
$file = $conf->global->EVENTORGANIZATION_CONFERENCEORBOOTH_ADDON.".php";
|
||||
$classname = $conf->global->EVENTORGANIZATION_CONFERENCEORBOOTH_ADDON;
|
||||
|
||||
// Include file with class
|
||||
$dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
|
||||
foreach ($dirmodels as $reldir) {
|
||||
$dir = dol_buildpath($reldir."core/modules/eventorganization/");
|
||||
|
||||
// Load file with numbering class (if found)
|
||||
$mybool |= @include_once $dir.$file;
|
||||
}
|
||||
|
||||
if ($mybool === false) {
|
||||
dol_print_error('', "Failed to include file ".$file);
|
||||
return '';
|
||||
}
|
||||
|
||||
if (class_exists($classname)) {
|
||||
$obj = new $classname();
|
||||
$numref = $obj->getNextValue($this);
|
||||
|
||||
if ($numref != '' && $numref != '-1') {
|
||||
return $numref;
|
||||
} else {
|
||||
$this->error = $obj->error;
|
||||
//dol_print_error($this->db,get_class($this)."::getNextNumRef ".$obj->error);
|
||||
return "";
|
||||
}
|
||||
} else {
|
||||
print $langs->trans("Error")." ".$langs->trans("ClassNotFound").' '.$classname;
|
||||
return "";
|
||||
}
|
||||
} else {
|
||||
print $langs->trans("ErrorNumberingModuleNotSetup", $this->element);
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a document onto disk according to template module.
|
||||
*
|
||||
@ -1033,30 +782,3 @@ class ConferenceOrBooth extends CommonObject
|
||||
return $error;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/commonobjectline.class.php';
|
||||
|
||||
/**
|
||||
* Class ConferenceOrBoothLine. You can also remove this and generate a CRUD class for lines objects.
|
||||
*/
|
||||
class ConferenceOrBoothLine extends CommonObjectLine
|
||||
{
|
||||
// To complete with content of an object ConferenceOrBoothLine
|
||||
// We should have a field rowid, fk_conferenceorbooth and position
|
||||
|
||||
/**
|
||||
* @var int Does object support extrafields ? 0=No, 1=Yes
|
||||
*/
|
||||
public $isextrafieldmanaged = 0;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param DoliDb $db Database handler
|
||||
*/
|
||||
public function __construct(DoliDB $db)
|
||||
{
|
||||
$this->db = $db;
|
||||
}
|
||||
}
|
||||
|
||||
@ -41,23 +41,6 @@ function conferenceorboothPrepareHead($object)
|
||||
$head[$h][2] = 'card';
|
||||
$h++;
|
||||
|
||||
if (isset($object->fields['note_public']) || isset($object->fields['note_private'])) {
|
||||
$nbNote = 0;
|
||||
if (!empty($object->note_private)) {
|
||||
$nbNote++;
|
||||
}
|
||||
if (!empty($object->note_public)) {
|
||||
$nbNote++;
|
||||
}
|
||||
$head[$h][0] = dol_buildpath('/eventorganization/conferenceorbooth_note.php', 1).'?id='.$object->id;
|
||||
$head[$h][1] = $langs->trans('Notes');
|
||||
if ($nbNote > 0) {
|
||||
$head[$h][1] .= (empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER) ? '<span class="badge marginleftonlyshort">'.$nbNote.'</span>' : '');
|
||||
}
|
||||
$head[$h][2] = 'note';
|
||||
$h++;
|
||||
}
|
||||
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/link.class.php';
|
||||
$upload_dir = $conf->eventorganization->dir_output."/conferenceorbooth/".dol_sanitizeFileName($object->ref);
|
||||
|
||||
@ -1009,16 +1009,7 @@ if ($action == 'create') {
|
||||
$i++;
|
||||
}
|
||||
print '});
|
||||
jQuery("#autoreset").click(function() { console.log("Reset values to 0"); ';
|
||||
$i = 0;
|
||||
while ($i < $numAsked) {
|
||||
print 'jQuery("#qtyl'.$i.'").val(0);'."\n";
|
||||
if (!empty($conf->productbatch->enabled)) {
|
||||
print 'jQuery("#qtyl'.$i.'_'.$i.'").val(0);'."\n";
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
print '});
|
||||
jQuery("#autoreset").click(function() { console.log("Reset values to 0"); jQuery(".qtyl").val(0); });
|
||||
});
|
||||
</script>';
|
||||
|
||||
@ -1252,7 +1243,7 @@ if ($action == 'create') {
|
||||
$deliverableQty = min($quantityToBeDelivered, $batchStock);
|
||||
print '<!-- subj='.$subj.'/'.$nbofsuggested.' --><tr '.((($subj + 1) == $nbofsuggested) ? $bc[$var] : '').'>';
|
||||
print '<td colspan="3" ></td><td class="center">';
|
||||
print '<input name="qtyl'.$indiceAsked.'_'.$subj.'" id="qtyl'.$indiceAsked.'_'.$subj.'" type="text" size="4" value="'.$deliverableQty.'">';
|
||||
print '<input class="qtyl" name="qtyl'.$indiceAsked.'_'.$subj.'" id="qtyl'.$indiceAsked.'_'.$subj.'" type="text" size="4" value="'.$deliverableQty.'">';
|
||||
print '</td>';
|
||||
|
||||
print '<!-- Show details of lot -->';
|
||||
@ -1284,7 +1275,7 @@ if ($action == 'create') {
|
||||
} else {
|
||||
print '<!-- Case there is no details of lot at all -->';
|
||||
print '<tr class="oddeven"><td colspan="3"></td><td class="center">';
|
||||
print '<input name="qtyl'.$indiceAsked.'_'.$subj.'" id="qtyl'.$indiceAsked.'_'.$subj.'" type="text" size="4" value="0" disabled="disabled"> ';
|
||||
print '<input class="qtyl" name="qtyl'.$indiceAsked.'_'.$subj.'" id="qtyl'.$indiceAsked.'_'.$subj.'" type="text" size="4" value="0" disabled="disabled"> ';
|
||||
print '</td>';
|
||||
|
||||
print '<td class="left">';
|
||||
@ -1395,7 +1386,7 @@ if ($action == 'create') {
|
||||
$deliverableQty = 0;
|
||||
}
|
||||
print '<!-- subj='.$subj.'/'.$nbofsuggested.' --><tr '.((($subj + 1) == $nbofsuggested) ? $bc[$var] : '').'><td colspan="3"></td><td class="center">';
|
||||
print '<input name="qtyl'.$indiceAsked.'_'.$subj.'" id="qtyl'.$indiceAsked.'_'.$subj.'" type="text" size="4" value="'.$deliverableQty.'">';
|
||||
print '<input class="qtyl" name="qtyl'.$indiceAsked.'_'.$subj.'" id="qtyl'.$indiceAsked.'_'.$subj.'" type="text" size="4" value="'.$deliverableQty.'">';
|
||||
print '</td>';
|
||||
|
||||
print '<td class="left">';
|
||||
@ -1439,7 +1430,7 @@ if ($action == 'create') {
|
||||
if ($warehouse_selected_id <= 0) { // We did not force a given warehouse, so we won't have no warehouse to change qty.
|
||||
$disabled = 'disabled="disabled"';
|
||||
}
|
||||
print '<input name="qtyl'.$indiceAsked.'_'.$subj.'" id="qtyl'.$indiceAsked.'_'.$subj.'" type="text" size="4" value="0"'.($disabled ? ' '.$disabled : '').'> ';
|
||||
print '<input class="qtyl" name="qtyl'.$indiceAsked.'_'.$subj.'" id="qtyl'.$indiceAsked.'_'.$subj.'" type="text" size="4" value="0"'.($disabled ? ' '.$disabled : '').'> ';
|
||||
} else {
|
||||
print $langs->trans("NA");
|
||||
}
|
||||
@ -2141,7 +2132,7 @@ if ($action == 'create') {
|
||||
foreach ($lines[$i]->detail_batch as $detail_batch) {
|
||||
print '<tr>';
|
||||
// Qty to ship or shipped
|
||||
print '<td><input name="qtyl'.$detail_batch->fk_expeditiondet.'_'.$detail_batch->id.'" id="qtyl'.$line_id.'_'.$detail_batch->id.'" type="text" size="4" value="'.$detail_batch->qty.'"></td>';
|
||||
print '<td><input class="qtyl" name="qtyl'.$detail_batch->fk_expeditiondet.'_'.$detail_batch->id.'" id="qtyl'.$line_id.'_'.$detail_batch->id.'" type="text" size="4" value="'.$detail_batch->qty.'"></td>';
|
||||
// Batch number managment
|
||||
if ($lines[$i]->entrepot_id == 0) {
|
||||
// only show lot numbers from src warehouse when shipping from multiple warehouses
|
||||
@ -2153,7 +2144,7 @@ if ($action == 'create') {
|
||||
// add a 0 qty lot row to be able to add a lot
|
||||
print '<tr>';
|
||||
// Qty to ship or shipped
|
||||
print '<td><input name="qtyl'.$line_id.'_0" id="qtyl'.$line_id.'_0" type="text" size="4" value="0"></td>';
|
||||
print '<td><input class="qtyl" name="qtyl'.$line_id.'_0" id="qtyl'.$line_id.'_0" type="text" size="4" value="0"></td>';
|
||||
// Batch number managment
|
||||
print '<td>'.$formproduct->selectLotStock('', 'batchl'.$line_id.'_0', '', 1, 0, $lines[$i]->fk_product).'</td>';
|
||||
print '</tr>';
|
||||
@ -2163,7 +2154,7 @@ if ($action == 'create') {
|
||||
print '<!-- case edit 2 -->';
|
||||
print '<tr>';
|
||||
// Qty to ship or shipped
|
||||
print '<td><input name="qtyl'.$line_id.'" id="qtyl'.$line_id.'" type="text" size="4" value="'.$lines[$i]->qty_shipped.'"></td>';
|
||||
print '<td><input class="qtyl" name="qtyl'.$line_id.'" id="qtyl'.$line_id.'" type="text" size="4" value="'.$lines[$i]->qty_shipped.'"></td>';
|
||||
// Warehouse source
|
||||
print '<td>'.$formproduct->selectWarehouses($lines[$i]->entrepot_id, 'entl'.$line_id, '', 1, 0, $lines[$i]->fk_product, '', 1).'</td>';
|
||||
// Batch number managment
|
||||
@ -2174,7 +2165,7 @@ if ($action == 'create') {
|
||||
foreach ($lines[$i]->details_entrepot as $detail_entrepot) {
|
||||
print '<tr>';
|
||||
// Qty to ship or shipped
|
||||
print '<td><input name="qtyl'.$detail_entrepot->line_id.'" id="qtyl'.$detail_entrepot->line_id.'" type="text" size="4" value="'.$detail_entrepot->qty_shipped.'"></td>';
|
||||
print '<td><input class="qtyl" name="qtyl'.$detail_entrepot->line_id.'" id="qtyl'.$detail_entrepot->line_id.'" type="text" size="4" value="'.$detail_entrepot->qty_shipped.'"></td>';
|
||||
// Warehouse source
|
||||
print '<td>'.$formproduct->selectWarehouses($detail_entrepot->entrepot_id, 'entl'.$detail_entrepot->line_id, '', 1, 0, $lines[$i]->fk_product, '', 1).'</td>';
|
||||
// Batch number managment
|
||||
@ -2189,7 +2180,7 @@ if ($action == 'create') {
|
||||
print '<!-- case edit 5 -->';
|
||||
print '<tr>';
|
||||
// Qty to ship or shipped
|
||||
print '<td><input name="qtyl'.$line_id.'" id="qtyl'.$line_id.'" type="text" size="4" value="'.$lines[$i]->qty_shipped.'"></td>';
|
||||
print '<td><input class="qtyl" name="qtyl'.$line_id.'" id="qtyl'.$line_id.'" type="text" size="4" value="'.$lines[$i]->qty_shipped.'"></td>';
|
||||
// Warehouse source
|
||||
print '<td></td>';
|
||||
// Batch number managment
|
||||
|
||||
@ -952,7 +952,9 @@ class ProductFournisseur extends Product
|
||||
}
|
||||
$out .= '</table>';
|
||||
} else {
|
||||
$out = ($showunitprice ?price($this->fourn_unitprice * (1 - $this->fourn_remise_percent / 100) + $this->fourn_remise).' '.$langs->trans("HT").' <span class="opacitymedium">(</span>' : '').($showsuptitle ? '<span class="opacitymedium">'.$langs->trans("Supplier").'</span>: ' : '').$this->getSocNomUrl(1, 'supplier', $maxlen, $notooltip).' / <span class="opacitymedium">'.$langs->trans("SupplierRef").'</span>: '.$this->fourn_ref.($showunitprice ? '<span class="opacitymedium">)</span>' : '');
|
||||
$out = ($showunitprice ? price($this->fourn_unitprice * (1 - $this->fourn_remise_percent / 100) + $this->fourn_remise).' '.$langs->trans("HT").' <span class="opacitymedium">(</span>' : '');
|
||||
$out .= ($showsuptitle ? '<span class="opacitymedium">'.$langs->trans("Supplier").'</span>: ' : '').$this->getSocNomUrl(1, 'supplier', $maxlen, $notooltip).' / <span class="opacitymedium">'.$langs->trans("SupplierRef").'</span>: '.$this->ref_supplier;
|
||||
$out .= ($showunitprice ? '<span class="opacitymedium">)</span>' : '');
|
||||
}
|
||||
return $out;
|
||||
}
|
||||
|
||||
@ -379,17 +379,17 @@ if (empty($reshook)) {
|
||||
$prod_entry_mode = GETPOST('prod_entry_mode');
|
||||
if ($prod_entry_mode == 'free') {
|
||||
$idprod = 0;
|
||||
$price_ht = price2num(GETPOST('price_ht'), 'MU');
|
||||
$price_ht = price2num(GETPOST('price_ht'), 'MU', 2);
|
||||
$tva_tx = (GETPOST('tva_tx') ? GETPOST('tva_tx') : 0);
|
||||
} else {
|
||||
$idprod = GETPOST('idprod', 'int');
|
||||
$price_ht = price2num(GETPOST('price_ht'), 'MU');
|
||||
$price_ht = price2num(GETPOST('price_ht'), 'MU', 2);
|
||||
$tva_tx = '';
|
||||
}
|
||||
|
||||
$qty = price2num(GETPOST('qty'.$predef, 'alpha'), 'MS');
|
||||
$remise_percent = price2num(GETPOST('remise_percent'.$predef), 2);
|
||||
$price_ht_devise = price2num(GETPOST('multicurrency_price_ht'), 'CU');
|
||||
$price_ht_devise = price2num(GETPOST('multicurrency_price_ht'), 'CU', 2);
|
||||
|
||||
// Extrafields
|
||||
$extralabelsline = $extrafields->fetch_name_optionals_label($object->table_element_line);
|
||||
@ -711,7 +711,7 @@ if (empty($reshook)) {
|
||||
|
||||
if (GETPOST('price_ht') != '') {
|
||||
$price_base_type = 'HT';
|
||||
$ht = price2num(GETPOST('price_ht'));
|
||||
$ht = price2num(GETPOST('price_ht'), '', 2);
|
||||
} else {
|
||||
$vatratecleaned = $vat_rate;
|
||||
if (preg_match('/^(.*)\s*\((.*)\)$/', $vat_rate, $reg)) { // If vat is "xx (yy)"
|
||||
@ -719,12 +719,12 @@ if (empty($reshook)) {
|
||||
$vatratecode = $reg[2];
|
||||
}
|
||||
|
||||
$ttc = price2num(GETPOST('price_ttc'));
|
||||
$ttc = price2num(GETPOST('price_ttc'), '', 2);
|
||||
$ht = $ttc / (1 + ($vatratecleaned / 100));
|
||||
$price_base_type = 'HT';
|
||||
}
|
||||
|
||||
$pu_ht_devise = GETPOST('multicurrency_subprice');
|
||||
$pu_ht_devise = price2num(GETPOST('multicurrency_subprice'), '', 2);
|
||||
|
||||
// Extrafields Lines
|
||||
$extralabelsline = $extrafields->fetch_name_optionals_label($object->table_element_line);
|
||||
|
||||
@ -441,13 +441,13 @@ if ($action == 'updateline' && $user->rights->fournisseur->commande->receptionne
|
||||
$qty = $supplierorderdispatch->qty;
|
||||
$entrepot = $supplierorderdispatch->fk_entrepot;
|
||||
$product = $supplierorderdispatch->fk_product;
|
||||
$price = GETPOST('price');
|
||||
$price = price2num(GETPOST('price'), '', 2);
|
||||
$comment = $supplierorderdispatch->comment;
|
||||
$eatby = $supplierorderdispatch->fk_product;
|
||||
$sellby = $supplierorderdispatch->sellby;
|
||||
$batch = $supplierorderdispatch->batch;
|
||||
|
||||
$supplierorderdispatch->qty = GETPOST('qty', 'int');
|
||||
$supplierorderdispatch->qty = price2num(GETPOST('qty', 'alpha'), 'MS', 2);
|
||||
$supplierorderdispatch->fk_entrepot = GETPOST('fk_entrepot');
|
||||
$result = $supplierorderdispatch->update($user);
|
||||
}
|
||||
@ -855,7 +855,7 @@ if ($id > 0 || !empty($ref)) {
|
||||
// Already dispatched
|
||||
print '<td class="right">'.$products_dispatched[$objp->rowid].'</td>';
|
||||
|
||||
if (!empty($conf->productbatch->enabled) && $objp->tobatch == 1) {
|
||||
if (!empty($conf->productbatch->enabled) && $objp->tobatch > 0) {
|
||||
$type = 'batch';
|
||||
print '<td class="right">';
|
||||
print '</td>'; // Qty to dispatch
|
||||
@ -967,7 +967,7 @@ if ($id > 0 || !empty($ref)) {
|
||||
print '</td>';
|
||||
|
||||
print '<td>';
|
||||
if (!empty($conf->productbatch->enabled) && $objp->tobatch == 1) {
|
||||
if (!empty($conf->productbatch->enabled) && $objp->tobatch > 0) {
|
||||
$type = 'batch';
|
||||
print img_picto($langs->trans('AddStockLocationLine'), 'split.png', 'class="splitbutton" onClick="addDispatchLine('.$i.', \''.$type.'\')"');
|
||||
} else {
|
||||
|
||||
@ -1064,10 +1064,10 @@ if (empty($reshook)) {
|
||||
$tva_tx = (GETPOST('tva_tx') ? GETPOST('tva_tx') : 0);
|
||||
|
||||
if (GETPOST('price_ht') != '' || GETPOST('multicurrency_subprice') != '') {
|
||||
$up = price2num(GETPOST('price_ht'));
|
||||
$up = price2num(GETPOST('price_ht'), '', 2);
|
||||
$price_base_type = 'HT';
|
||||
} else {
|
||||
$up = price2num(GETPOST('price_ttc'));
|
||||
$up = price2num(GETPOST('price_ttc'), '', 2);
|
||||
$price_base_type = 'TTC';
|
||||
}
|
||||
|
||||
@ -1163,17 +1163,17 @@ if (empty($reshook)) {
|
||||
$prod_entry_mode = GETPOST('prod_entry_mode');
|
||||
if ($prod_entry_mode == 'free') {
|
||||
$idprod = 0;
|
||||
$price_ht = price2num(GETPOST('price_ht'), 'MU');
|
||||
$price_ht = price2num(GETPOST('price_ht'), 'MU', 2);
|
||||
$tva_tx = (GETPOST('tva_tx') ? GETPOST('tva_tx') : 0);
|
||||
} else {
|
||||
$idprod = GETPOST('idprod', 'int');
|
||||
$price_ht = price2num(GETPOST('price_ht'), 'MU');
|
||||
$price_ht = price2num(GETPOST('price_ht'), 'MU', 2);
|
||||
$tva_tx = '';
|
||||
}
|
||||
|
||||
$qty = price2num(GETPOST('qty'.$predef, 'alpha'), 'MS');
|
||||
$remise_percent = price2num(GETPOST('remise_percent'.$predef), 2);
|
||||
$price_ht_devise = price2num(GETPOST('multicurrency_price_ht'), 'CU');
|
||||
$price_ht_devise = price2num(GETPOST('multicurrency_price_ht'), 'CU', 2);
|
||||
|
||||
// Extrafields
|
||||
$extralabelsline = $extrafields->fetch_name_optionals_label($object->table_element_line);
|
||||
|
||||
@ -178,3 +178,6 @@ INSERT INTO llx_accounting_system (fk_country, pcg_version, label, active) VALUE
|
||||
|
||||
-- Description of chart of account Canada CA-ENG-BASE
|
||||
INSERT INTO llx_accounting_system (fk_country, pcg_version, label, active) VALUES ( 14, 'CA-ENG-BASE', 'Canadian basic chart of accounts - English', 1);
|
||||
|
||||
-- Description of chart of account Mexico SAT/24-2019
|
||||
INSERT INTO llx_accounting_system (fk_country, pcg_version, label, active) VALUES ( 154, 'SAT/24-2019', 'Catalogo y codigo agrupador fiscal del 2019', 1);
|
||||
|
||||
1085
htdocs/install/mysql/data/llx_accounting_account_mx.sql
Normal file
1085
htdocs/install/mysql/data/llx_accounting_account_mx.sql
Normal file
File diff suppressed because it is too large
Load Diff
@ -48,3 +48,8 @@ insert into llx_c_actioncomm (id, code, type, libelle, module, active, position)
|
||||
-- Code used from 3.3+ when type of event is not used
|
||||
insert into llx_c_actioncomm (id, code, type, libelle, module, active, position) values ( 40,'AC_OTH_AUTO','systemauto','Other (automatically inserted events)',NULL, 1, 20);
|
||||
insert into llx_c_actioncomm (id, code, type, libelle, module, active, position) values ( 50,'AC_OTH','system','Other (manually inserted events)',NULL, 1, 5);
|
||||
|
||||
INSERT INTO llx_c_actioncomm (id, code, type, libelle, module, active, position) VALUES ( 60,'AC_EO_ONLINECONF','module','Online/Virtual conference','conference@eventorganization', 1, 60);
|
||||
INSERT INTO llx_c_actioncomm (id, code, type, libelle, module, active, position) VALUES ( 61,'AC_EO_INDOORCONF','module','Indoor conference','conference@eventorganization', 1, 61);
|
||||
INSERT INTO llx_c_actioncomm (id, code, type, libelle, module, active, position) VALUES ( 62,'AC_EO_ONLINEBOOTH','module','Online/Virtual booth','booth@eventorganization', 1, 62);
|
||||
INSERT INTO llx_c_actioncomm (id, code, type, libelle, module, active, position) VALUES ( 63,'AC_EO_INDOORBOOTH','module','Indoor booth','booth@eventorganization', 1, 63);
|
||||
|
||||
@ -48,6 +48,10 @@ UPDATE llx_c_country SET eec = 1 WHERE code IN ('AT','BE','BG','CY','CZ','DE','D
|
||||
|
||||
-- For v14
|
||||
|
||||
ALTER TABLE llx_mailing_cibles MODIFY COLUMN tag varchar(64) NULL;
|
||||
ALTER TABLE llx_mailing_cibles ADD INDEX idx_mailing_cibles_tag (tag);
|
||||
|
||||
|
||||
ALTER TABLE llx_c_availability ADD COLUMN position integer NOT NULL DEFAULT 0;
|
||||
|
||||
ALTER TABLE llx_adherent ADD COLUMN ref varchar(30) AFTER rowid;
|
||||
@ -167,7 +171,7 @@ create table llx_payment_vat
|
||||
ALTER TABLE llx_tva ADD COLUMN paye smallint default 1 NOT NULL;
|
||||
ALTER TABLE llx_tva ADD COLUMN fk_account integer;
|
||||
|
||||
--INSERT INTO llx_payment_vat (fk_tva, datec, datep, amount, fk_typepaiement, num_paiement, note, fk_bank, fk_user_creat, fk_user_modif) SELECT rowid, NOW(), datep, amount, COALESCE(fk_typepayment, 0), num_payment, '', fk_bank, fk_user_creat, fk_user_modif FROM llx_tva;
|
||||
INSERT INTO llx_payment_vat (rowid, fk_tva, datec, datep, amount, fk_typepaiement, num_paiement, note, fk_bank, fk_user_creat, fk_user_modif) SELECT rowid, rowid, NOW(), datep, amount, COALESCE(fk_typepayment, 0), num_payment, 'Created automatically by migration v13 to v14', fk_bank, fk_user_creat, fk_user_modif FROM llx_tva WHERE fk_bank IS NOT NULL;
|
||||
--UPDATE llx_bank_url as url INNER JOIN llx_tva tva ON tva.rowid = url.url_id SET url.type = 'vat', url.label = CONCAT('(', tva.label, ')') WHERE type = 'payment_vat';
|
||||
--INSERT INTO llx_bank_url (fk_bank, url_id, url, label, type) SELECT b.fk_bank, ptva.rowid, REPLACE(b.url, 'tva/card.php', 'payment_vat/card.php'), '(paiement)', 'payment_vat' FROM llx_bank_url b INNER JOIN llx_tva tva ON (tva.fk_bank = b.fk_bank) INNER JOIN llx_payment_vat ptva on (ptva.fk_bank = b.fk_bank) WHERE type = 'vat';
|
||||
|
||||
@ -188,7 +192,21 @@ ALTER TABLE llx_projet ADD COLUMN accept_booth_suggestions integer DEFAULT 0;
|
||||
ALTER TABLE llx_projet ADD COLUMN price_registration double(24,8);
|
||||
ALTER TABLE llx_projet ADD COLUMN price_booth double(24,8);
|
||||
|
||||
ALTER TABLE llx_actioncomm ADD COLUMN num_vote integer DEFAULT NULL AFTER reply_to;
|
||||
ALTER TABLE llx_actioncomm ADD COLUMN event_paid smallint NOT NULL DEFAULT 0 AFTER num_vote;
|
||||
ALTER TABLE llx_actioncomm ADD COLUMN status smallint NOT NULL DEFAULT 0 AFTER event_paid;
|
||||
ALTER TABLE llx_actioncomm ADD COLUMN ref varchar(30) AFTER id;
|
||||
UPDATE llx_actioncomm SET ref = id WHERE ref = '' OR ref IS NULL;
|
||||
ALTER TABLE llx_actioncomm MODIFY COLUMN ref varchar(30) NOT NULL;
|
||||
ALTER TABLE llx_actioncomm ADD UNIQUE INDEX uk_actioncomm_ref (ref, entity);
|
||||
|
||||
ALTER TABLE llx_c_actioncomm MODIFY code varchar(50) NOT NULL;
|
||||
ALTER TABLE llx_c_actioncomm MODIFY module varchar(50) DEFAULT NULL;
|
||||
|
||||
INSERT INTO llx_c_actioncomm (id, code, type, libelle, module, active, position) VALUES ( 60,'AC_EO_ONLINECONF','module','Online/Virtual conference','conference@eventorganization', 1, 60);
|
||||
INSERT INTO llx_c_actioncomm (id, code, type, libelle, module, active, position) VALUES ( 61,'AC_EO_INDOORCONF','module','Indoor conference','conference@eventorganization', 1, 61);
|
||||
INSERT INTO llx_c_actioncomm (id, code, type, libelle, module, active, position) VALUES ( 62,'AC_EO_ONLINEBOOTH','module','Online/Virtual booth','booth@eventorganization', 1, 62);
|
||||
INSERT INTO llx_c_actioncomm (id, code, type, libelle, module, active, position) VALUES ( 63,'AC_EO_INDOORBOOTH','module','Indoor booth','booth@eventorganization', 1, 63);
|
||||
-- Code enhanced - Standardize field name
|
||||
ALTER TABLE llx_commande CHANGE COLUMN tva total_tva double(24,8) default 0;
|
||||
ALTER TABLE llx_supplier_proposal CHANGE COLUMN tva total_tva double(24,8) default 0;
|
||||
@ -197,3 +215,44 @@ ALTER TABLE llx_propal CHANGE COLUMN tva total_tva double(24,8) default 0;
|
||||
ALTER TABLE llx_propal CHANGE COLUMN total total_ttc double(24,8) default 0;
|
||||
ALTER TABLE llx_commande_fournisseur CHANGE COLUMN tva total_tva double(24,8) default 0;
|
||||
|
||||
|
||||
--VMYSQL4.3 ALTER TABLE llx_c_civility CHANGE COLUMN rowid rowid INTEGER NOT NULL AUTO_INCREMENT;
|
||||
--VPGSQL8.2 CREATE SEQUENCE llx_c_civility_rowid_seq OWNED BY llx_c_civility.rowid;
|
||||
--VPGSQL8.2 ALTER TABLE llx_c_civility ALTER COLUMN rowid SET DEFAULT nextval('llx_c_civility_rowid_seq');
|
||||
--VPGSQL8.2 SELECT setval('llx_c_civility_rowid_seq', MAX(rowid)) FROM llx_c_civility;
|
||||
|
||||
|
||||
-- Change for salary intent table
|
||||
create table llx_salary
|
||||
(
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
ref varchar(30) NULL, -- payment reference number (currently NULL because there is no numbering manager yet)
|
||||
label varchar(255),
|
||||
tms timestamp,
|
||||
datec datetime, -- Create date
|
||||
fk_user integer NOT NULL,
|
||||
datep date, -- payment date
|
||||
datev date, -- value date (this field should not be here, only into bank tables)
|
||||
salary double(24,8), -- salary of user when payment was done
|
||||
amount double(24,8) NOT NULL DEFAULT 0,
|
||||
fk_projet integer DEFAULT NULL,
|
||||
datesp date, -- date start period
|
||||
dateep date, -- date end period
|
||||
entity integer DEFAULT 1 NOT NULL, -- multi company id
|
||||
note text,
|
||||
fk_bank integer,
|
||||
paye smallint default 1 NOT NULL,
|
||||
fk_typepayment integer NOT NULL, -- default payment mode for payment
|
||||
fk_account integer, -- default bank account for payment
|
||||
fk_user_author integer, -- user creating
|
||||
fk_user_modif integer -- user making last change
|
||||
) ENGINE=innodb;
|
||||
|
||||
ALTER TABLE llx_payment_salary CHANGE COLUMN fk_user fk_user integer NULL;
|
||||
ALTER TABLE llx_payment_salary ADD COLUMN fk_salary integer;
|
||||
|
||||
INSERT INTO llx_salary (rowid, ref, fk_user, amount, fk_projet, fk_typepayment, label, datesp, dateep, entity, note, fk_bank, paye) SELECT ps.rowid, ps.rowid, ps.fk_user, ps.amount, ps.fk_projet, ps.fk_typepayment, ps.label, ps.datesp, ps.dateep, ps.entity, ps.note, ps.fk_bank, 1 FROM llx_payment_salary ps WHERE ps.fk_salary IS NULL;
|
||||
UPDATE llx_payment_salary as ps SET ps.fk_salary = ps.rowid WHERE ps.fk_salary IS NULL;
|
||||
UPDATE llx_payment_salary as ps SET ps.ref = ps.rowid WHERE ps.ref IS NULL;
|
||||
|
||||
ALTER TABLE llx_salary CHANGE paye paye smallint default 0 NOT NULL;
|
||||
|
||||
@ -17,7 +17,6 @@
|
||||
--
|
||||
-- ===========================================================================
|
||||
|
||||
|
||||
ALTER TABLE llx_actioncomm ADD INDEX idx_actioncomm_fk_soc (fk_soc);
|
||||
ALTER TABLE llx_actioncomm ADD INDEX idx_actioncomm_fk_contact (fk_contact);
|
||||
ALTER TABLE llx_actioncomm ADD INDEX idx_actioncomm_code (code);
|
||||
@ -27,5 +26,6 @@ ALTER TABLE llx_actioncomm ADD INDEX idx_actioncomm_fk_project (fk_project);
|
||||
ALTER TABLE llx_actioncomm ADD INDEX idx_actioncomm_datep (datep);
|
||||
ALTER TABLE llx_actioncomm ADD INDEX idx_actioncomm_datep2 (datep2);
|
||||
ALTER TABLE llx_actioncomm ADD INDEX idx_actioncomm_recurid (recurid);
|
||||
|
||||
ALTER TABLE llx_actioncomm ADD INDEX idx_actioncomm_ref_ext (ref_ext);
|
||||
|
||||
ALTER TABLE llx_actioncomm ADD UNIQUE INDEX uk_actioncomm_ref (ref, entity);
|
||||
|
||||
@ -24,6 +24,7 @@
|
||||
create table llx_actioncomm
|
||||
(
|
||||
id integer AUTO_INCREMENT PRIMARY KEY,
|
||||
ref varchar(30) NOT NULL,
|
||||
ref_ext varchar(255), -- reference into an external system (not used by dolibarr). Example: An id coming from google calendar has length between 5 and 1024 chars. An event id must follow rule: chars used in base32hex encoding (i.e. lowercase letters a-v and digits 0-9, see section 3.1.2 in RFC2938)
|
||||
entity integer DEFAULT 1 NOT NULL, -- multi company id
|
||||
datep datetime, -- date start
|
||||
@ -31,7 +32,7 @@ create table llx_actioncomm
|
||||
|
||||
fk_action integer, -- type of action (optional link with id in llx_c_actioncomm or null)
|
||||
code varchar(50) NULL, -- code of action for automatic action ('AC_OTH_AUTO' for automatic actions, 'AC_EMAILIN_AUTO' for email input, 'AC_xxx' for manual action...)
|
||||
|
||||
|
||||
datec datetime, -- date creation
|
||||
tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- last modification date
|
||||
fk_user_author integer, -- user id of user that has created record
|
||||
@ -71,7 +72,11 @@ create table llx_actioncomm
|
||||
recurid varchar(128), -- used to store event id to link each other all the repeating event record. It can be the 'iCalUID' as in RFC5545 (an id similar for all the same serie)
|
||||
recurrule varchar(128), -- contains string with ical format recurring rule like 'FREQ=MONTHLY;INTERVAL=2;BYMONTHDAY=19' or 'FREQ=WEEKLY;BYDAY=MO'
|
||||
recurdateend datetime, -- no more recurring event after this date
|
||||
|
||||
|
||||
num_vote integer DEFAULT NULL, -- use for Event Organization module
|
||||
event_paid smallint NOT NULL DEFAULT 0, -- use for Event Organization module
|
||||
status smallint NOT NULL DEFAULT 0, -- use for Event Organization module for now, but could be use after for event global status
|
||||
|
||||
fk_element integer DEFAULT NULL, -- For link to an element (proposal, invoice, order, ...)
|
||||
elementtype varchar(255) DEFAULT NULL, -- For link to an element (proposal, invoice, order, ...)
|
||||
|
||||
|
||||
@ -21,10 +21,10 @@
|
||||
create table llx_c_actioncomm
|
||||
(
|
||||
id integer PRIMARY KEY,
|
||||
code varchar(12) NOT NULL,
|
||||
code varchar(50) NOT NULL,
|
||||
type varchar(50) DEFAULT 'system' NOT NULL,
|
||||
libelle varchar(48) NOT NULL,
|
||||
module varchar(16) DEFAULT NULL,
|
||||
module varchar(50) DEFAULT NULL,
|
||||
active tinyint DEFAULT 1 NOT NULL,
|
||||
todo tinyint, -- deprecated
|
||||
color varchar(9),
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
|
||||
create table llx_c_civility
|
||||
(
|
||||
rowid integer PRIMARY KEY,
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY NOT NULL
|
||||
code varchar(6) NOT NULL,
|
||||
label varchar(50),
|
||||
active tinyint DEFAULT 1 NOT NULL,
|
||||
|
||||
@ -21,3 +21,5 @@ ALTER TABLE llx_mailing_cibles ADD UNIQUE uk_mailing_cibles (fk_mailing, email);
|
||||
|
||||
ALTER TABLE llx_mailing_cibles ADD INDEX idx_mailing_cibles_email (email);
|
||||
|
||||
ALTER TABLE llx_mailing_cibles ADD INDEX idx_mailing_cibles_tag (tag);
|
||||
|
||||
|
||||
@ -28,7 +28,7 @@ create table llx_mailing_cibles
|
||||
firstname varchar(160),
|
||||
email varchar(160) NOT NULL,
|
||||
other varchar(255) NULL,
|
||||
tag varchar(128) NULL,
|
||||
tag varchar(64) NULL, -- a unique key as a hash of: dolibarr_main_instance_unique_id;email;lastname;mailing_id;MAILING_EMAIL_UNSUBSCRIBE_KEY
|
||||
statut smallint NOT NULL DEFAULT 0, -- -1 = error, 0 = not sent, ...
|
||||
source_url varchar(255),
|
||||
source_id integer,
|
||||
|
||||
@ -24,4 +24,3 @@ ALTER TABLE llx_payment_salary ADD INDEX idx_payment_salary_datesp (datesp);
|
||||
ALTER TABLE llx_payment_salary ADD INDEX idx_payment_salary_dateep (dateep);
|
||||
|
||||
ALTER TABLE llx_payment_salary ADD CONSTRAINT fk_payment_salary_user FOREIGN KEY (fk_user) REFERENCES llx_user (rowid);
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@ create table llx_payment_salary
|
||||
ref varchar(30) NULL, -- payment reference number (currently NULL because there is no numbering manager yet)
|
||||
tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
datec datetime, -- Create date
|
||||
fk_user integer NOT NULL,
|
||||
fk_user integer DEFAULT NULL,
|
||||
datep date, -- payment date
|
||||
datev date, -- value date (this field should not be here, only into bank tables)
|
||||
salary double(24,8), -- salary of user when payment was done
|
||||
@ -37,5 +37,6 @@ create table llx_payment_salary
|
||||
note text,
|
||||
fk_bank integer,
|
||||
fk_user_author integer, -- user creating
|
||||
fk_user_modif integer -- user making last change
|
||||
fk_user_modif integer, -- user making last change
|
||||
fk_salary integer
|
||||
)ENGINE=innodb;
|
||||
|
||||
44
htdocs/install/mysql/tables/llx_salary.sql
Normal file
44
htdocs/install/mysql/tables/llx_salary.sql
Normal file
@ -0,0 +1,44 @@
|
||||
-- ===================================================================
|
||||
-- Copyright (C) 2011-2018 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||
-- Copyright (C) 2021 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_salary
|
||||
(
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
ref varchar(30) NULL, -- payment reference number (currently NULL because there is no numbering manager yet)
|
||||
tms timestamp,
|
||||
datec datetime, -- Create date
|
||||
fk_user integer NOT NULL,
|
||||
datep date, -- payment date
|
||||
datev date, -- value date (this field should not be here, only into bank tables)
|
||||
salary double(24,8), -- salary of user when payment was done
|
||||
amount double(24,8) NOT NULL DEFAULT 0,
|
||||
fk_projet integer DEFAULT NULL,
|
||||
fk_typepayment integer NOT NULL,
|
||||
num_payment varchar(50), -- num cheque or other
|
||||
label varchar(255),
|
||||
datesp date, -- date start period
|
||||
dateep date, -- date end period
|
||||
entity integer DEFAULT 1 NOT NULL, -- multi company id
|
||||
note text,
|
||||
fk_bank integer,
|
||||
paye smallint default 0 NOT NULL,
|
||||
fk_account integer,
|
||||
fk_user_author integer, -- user creating
|
||||
fk_user_modif integer -- user making last change
|
||||
)ENGINE=innodb;
|
||||
@ -897,7 +897,7 @@ if ($ok && GETPOST('clean_product_stock_batch', 'alpha')) {
|
||||
$sql = "SELECT p.rowid, p.ref, p.tobatch, ps.rowid as psrowid, ps.fk_entrepot, ps.reel, SUM(pb.qty) as reelbatch";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."product as p, ".MAIN_DB_PREFIX."product_stock as ps LEFT JOIN ".MAIN_DB_PREFIX."product_batch as pb ON ps.rowid = pb.fk_product_stock";
|
||||
$sql .= " WHERE p.rowid = ps.fk_product";
|
||||
$sql .= " AND p.tobatch = 1";
|
||||
$sql .= " AND p.tobatch > 0";
|
||||
$sql .= " GROUP BY p.rowid, p.ref, p.tobatch, ps.rowid, ps.fk_entrepot, ps.reel";
|
||||
$sql .= " HAVING reel != SUM(pb.qty) or SUM(pb.qty) IS NULL";
|
||||
print $sql;
|
||||
@ -981,7 +981,7 @@ if ($ok && GETPOST('clean_product_stock_negative_if_batch', 'alpha')) {
|
||||
$sql = "SELECT p.rowid, p.ref, p.tobatch, ps.rowid as psrowid, ps.fk_entrepot, ps.reel, SUM(pb.qty) as reelbatch";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."product as p, ".MAIN_DB_PREFIX."product_stock as ps, ".MAIN_DB_PREFIX."product_batch as pb";
|
||||
$sql .= " WHERE p.rowid = ps.fk_product AND ps.rowid = pb.fk_product_stock";
|
||||
$sql .= " AND p.tobatch = 1";
|
||||
$sql .= " AND p.tobatch > 0";
|
||||
$sql .= " GROUP BY p.rowid, p.ref, p.tobatch, ps.rowid, ps.fk_entrepot, ps.reel";
|
||||
$sql .= " HAVING reel != SUM(pb.qty)";
|
||||
$resql = $db->query($sql);
|
||||
|
||||
@ -131,7 +131,7 @@ InvoiceLinesDone=Bound lines of invoices
|
||||
ExpenseReportLines=Lines of expense reports to bind
|
||||
ExpenseReportLinesDone=Bound lines of expense reports
|
||||
IntoAccount=Bind line with the accounting account
|
||||
TotalForAccount=Total for accounting account
|
||||
TotalForAccount=Total accounting account
|
||||
|
||||
|
||||
Ventilate=Bind
|
||||
|
||||
@ -37,6 +37,7 @@ UnlockNewSessions=Remove connection lock
|
||||
YourSession=Your session
|
||||
Sessions=Users Sessions
|
||||
WebUserGroup=Web server user/group
|
||||
PermissionsOnFiles=Permissions on files
|
||||
PermissionsOnFilesInWebRoot=Permissions on files in web root directory
|
||||
PermissionsOnFile=Permissions on file %s
|
||||
NoSessionFound=Your PHP configuration seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) may be protected (for example by OS permissions or by PHP directive open_basedir).
|
||||
@ -62,6 +63,7 @@ IfModuleEnabled=Note: yes is effective only if module <b>%s</b> is enabled
|
||||
RemoveLock=Remove/rename file <b>%s</b> if it exists, to allow usage of the Update/Install tool.
|
||||
RestoreLock=Restore file <b>%s</b>, with read permission only, to disable any further use of the Update/Install tool.
|
||||
SecuritySetup=Security setup
|
||||
PHPSetup=PHP setup
|
||||
SecurityFilesDesc=Define here options related to security about uploading files.
|
||||
ErrorModuleRequirePHPVersion=Error, this module requires PHP version %s or higher
|
||||
ErrorModuleRequireDolibarrVersion=Error, this module requires Dolibarr version %s or higher
|
||||
@ -348,9 +350,10 @@ LastActivationAuthor=Latest activation author
|
||||
LastActivationIP=Latest activation IP
|
||||
UpdateServerOffline=Update server offline
|
||||
WithCounter=Manage a counter
|
||||
GenericMaskCodes=You may enter any numbering mask. In this mask, the following tags could be used:<br><b>{000000}</b> corresponds to a number which will be incremented on each %s. Enter as many zeros as the desired length of the counter. The counter will be completed by zeros from the left in order to have as many zeros as the mask. <br><b>{000000+000}</b> same as previous but an offset corresponding to the number to the right of the + sign is applied starting on first %s. <br><b>{000000@x}</b> same as previous but the counter is reset to zero when month x is reached (x between 1 and 12, or 0 to use the early months of fiscal year defined in your configuration, or 99 to reset to zero every month). If this option is used and x is 2 or higher, then sequence {yy}{mm} or {yyyy}{mm} is also required. <br><b>{dd}</b> day (01 to 31).<br><b>{mm}</b> month (01 to 12).<br><b>{yy}</b>, <b>{yyyy}</b> or <b>{y}</b> year over 2, 4 or 1 numbers. <br>
|
||||
GenericMaskCodes2=<b>{cccc}</b> the client code on n characters<br><b>{cccc000}</b> the client code on n characters is followed by a counter dedicated for customer. This counter dedicated to customer is reset at same time than global counter.<br><b>{tttt}</b> The code of third party type on n characters (see menu Home - Setup - Dictionary - Types of third parties). If you add this tag, the counter will be different for each type of third party.<br>
|
||||
GenericMaskCodes3=All other characters in the mask will remain intact (except * or ? in 13th position in EAN13).<br>Spaces are not allowed.<br>In EAN13, the last character after the last } in 13th position should be * or ? . It will be replaced by the calculated key.<br>
|
||||
GenericMaskCodes=You may enter any numbering mask. In this mask, the following tags can be used:<br><b>{000000}</b> corresponds to a number which will be incremented on each %s. Enter as many zeros as the desired length of the counter. The counter will be completed by zeros from the left in order to have as many zeros as the mask. <br><b>{000000+000}</b> same as the previous one but an offset corresponding to the number to the right of the + sign is applied starting on the first %s. <br><b>{000000@x}</b> same as the previous one but the counter is reset to zero when month x is reached (x between 1 and 12, or 0 to use the early months of fiscal year defined in your configuration, or 99 to reset to zero every month). If this option is used and x is 2 or higher, then the sequence {yy}{mm} or {yyyy}{mm} is also required. <br><b>{dd}</b> day (01 to 31).<br><b>{mm}</b> month (01 to 12).<br><b>{yy}</b>, <b>{yyyy}</b> or <b>{y}</b> year over 2, 4 or 1 numbers. <br>
|
||||
GenericMaskCodes2=<b>{cccc}</b> the client code on n characters<br><b>{cccc000}</b> the client code on n characters is followed by a counter dedicated to the customer. This counter dedicated to customer is reset at same time as the global counter.<br><b>{tttt}</b> The code of third party type on n characters (see menu Home - Setup - Dictionary - Types of third parties). If you add this tag, the counter will be different for each type of third party.<br>
|
||||
GenericMaskCodes3=All other characters in the mask will remain intact.<br>Spaces are not allowed.<br>
|
||||
GenericMaskCodes3EAN=All other characters in the mask will remain intact (except * or ? in 13th position in EAN13).<br>Spaces are not allowed.<br>In EAN13, the last character after the last } in 13th position should be * or ? . It will be replaced by the calculated key.<br>
|
||||
GenericMaskCodes4a=<u>Example on the 99th %s of the third party TheCompany, with date 2007-01-31:</u><br>
|
||||
GenericMaskCodes4b=<u>Example on third party created on 2007-03-01:</u><br>
|
||||
GenericMaskCodes4c=<u>Example on product created on 2007-03-01:</u><br>
|
||||
@ -1249,7 +1252,7 @@ RunningUpdateProcessMayBeRequired=Running the upgrade process seems to be requir
|
||||
YouMustRunCommandFromCommandLineAfterLoginToUser=You must run this command from command line after login to a shell with user <b>%s</b> or you must add -W option at end of command line to provide <b>%s</b> password.
|
||||
YourPHPDoesNotHaveSSLSupport=SSL functions not available in your PHP
|
||||
DownloadMoreSkins=More skins to download
|
||||
SimpleNumRefModelDesc=Returns the reference number with format %syymm-nnnn where yy is year, mm is month and nnnn is sequential with no reset
|
||||
SimpleNumRefModelDesc=Returns the reference number in the format %syymm-nnnn where yy is the year, mm is the month and nnnn is a sequential auto-incrementing number with no reset
|
||||
ShowProfIdInAddress=Show professional id with addresses
|
||||
ShowVATIntaInAddress=Hide intra-Community VAT number with addresses
|
||||
TranslationUncomplete=Partial translation
|
||||
@ -1267,7 +1270,7 @@ MAIN_PROXY_HOST=Proxy server: Name/Address
|
||||
MAIN_PROXY_PORT=Proxy server: Port
|
||||
MAIN_PROXY_USER=Proxy server: Login/User
|
||||
MAIN_PROXY_PASS=Proxy server: Password
|
||||
DefineHereComplementaryAttributes=Define here any additional/custom attributes that you want to be included for: %s
|
||||
DefineHereComplementaryAttributes=Define any additional / custom attributes that must be added to: %s
|
||||
ExtraFields=Complementary attributes
|
||||
ExtraFieldsLines=Complementary attributes (lines)
|
||||
ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
|
||||
@ -1511,6 +1514,7 @@ LDAPFieldLoginUnix=Login (unix)
|
||||
LDAPFieldLoginExample=Example: uid
|
||||
LDAPFilterConnection=Search filter
|
||||
LDAPFilterConnectionExample=Example: &(objectClass=inetOrgPerson)
|
||||
LDAPGroupFilterExample=Example: &(objectClass=groupOfUsers)
|
||||
LDAPFieldLoginSamba=Login (samba, activedirectory)
|
||||
LDAPFieldLoginSambaExample=Example: samaccountname
|
||||
LDAPFieldFullname=Full name
|
||||
@ -2096,7 +2100,7 @@ SwitchThisForABetterSecurity=Switching this value to %s is recommended for more
|
||||
DictionaryProductNature= Nature of product
|
||||
CountryIfSpecificToOneCountry=Country (if specific to a given country)
|
||||
YouMayFindSecurityAdviceHere=You may find security advisory here
|
||||
ModuleActivatedMayExposeInformation=This module may expose sensitive data. If you don't need it, disable it.
|
||||
ModuleActivatedMayExposeInformation=This PHP extension may expose sensitive data. If you don't need it, disable it.
|
||||
ModuleActivatedDoNotUseInProduction=A module designed for the development has been enabled. Do not enable it on a production environment.
|
||||
CombinationsSeparator=Separator character for product combinations
|
||||
SeeLinkToOnlineDocumentation=See link to online documention on top menu for examples
|
||||
|
||||
@ -495,6 +495,7 @@ Reported=Delayed
|
||||
DisabledBecausePayments=Not possible since there are some payments
|
||||
CantRemovePaymentWithOneInvoicePaid=Can't remove payment since there is at least one invoice classified paid
|
||||
CantRemovePaymentVATPaid=Can't remove payment since VAT declaration is classified paid
|
||||
CantRemovePaymentSalaryPaid=Can't remove payment since salary is classified paid
|
||||
ExpectedToPay=Expected payment
|
||||
CantRemoveConciliatedPayment=Can't remove reconciled payment
|
||||
PayedByThisPayment=Paid by this payment
|
||||
@ -502,6 +503,7 @@ ClosePaidInvoicesAutomatically=Classify automatically all standard, down payment
|
||||
ClosePaidCreditNotesAutomatically=Classify automatically all credit notes as "Paid" when refund is done entirely.
|
||||
ClosePaidContributionsAutomatically=Classify automatically all social or fiscal contributions as "Paid" when payment is done entirely.
|
||||
ClosePaidVATAutomatically=Classify automatically VAT declaration as "Paid" when payment is done entirely.
|
||||
ClosePaidSalaryAutomatically=Classify automatically salary as "Paid" when payment is done entirely.
|
||||
AllCompletelyPayedInvoiceWillBeClosed=All invoices with no remainder to pay will be automatically closed with status "Paid".
|
||||
ToMakePayment=Pay
|
||||
ToMakePaymentBack=Pay back
|
||||
|
||||
@ -68,6 +68,7 @@ ActionAC_OTH_AUTO=Other auto
|
||||
ActionAC_MANUAL=Manually inserted events
|
||||
ActionAC_AUTO=Automatically inserted events
|
||||
ActionAC_OTH_AUTOShort=Other
|
||||
ActionAC_EVENTORGANIZATION=Event organization events
|
||||
Stats=Sales statistics
|
||||
StatusProsp=Prospect status
|
||||
DraftPropals=Draft commercial proposals
|
||||
|
||||
@ -86,7 +86,7 @@ PaymentCustomerInvoice=Customer invoice payment
|
||||
PaymentSupplierInvoice=vendor invoice payment
|
||||
PaymentSocialContribution=Social/fiscal tax payment
|
||||
PaymentVat=VAT payment
|
||||
AutomaticCreationPayment=Automatically create a total payment
|
||||
AutomaticCreationPayment=Automatically record the payment of the salary
|
||||
ListPayment=List of payments
|
||||
ListOfCustomerPayments=List of customer payments
|
||||
ListOfSupplierPayments=List of vendor payments
|
||||
@ -139,12 +139,16 @@ DateChequeReceived=Check reception date
|
||||
NbOfCheques=No. of checks
|
||||
PaySocialContribution=Pay a social/fiscal tax
|
||||
PayVAT=Pay a VAT declaration
|
||||
PaySalary=Pay a salary card
|
||||
ConfirmPaySocialContribution=Are you sure you want to classify this social or fiscal tax as paid ?
|
||||
ConfirmPayVAT=Are you sure you want to classify this VAT declaration as paid ?
|
||||
ConfirmPaySalary=Are you sure you want to classify this salary card as paid?
|
||||
DeleteSocialContribution=Delete a social or fiscal tax payment
|
||||
DeleteVAT=Delete a VAT declaration
|
||||
DeleteSalary=Delete a salary card
|
||||
ConfirmDeleteSocialContribution=Are you sure you want to delete this social/fiscal tax payment ?
|
||||
ConfirmDeleteVAT=Are you sure you want to delete this VAT declaration ?
|
||||
ConfirmDeleteSalary=Are you sure you want to delete this salary?
|
||||
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>.
|
||||
@ -244,6 +248,7 @@ ACCOUNTING_ACCOUNT_SUPPLIER=Accounting account used for vendor third parties
|
||||
ACCOUNTING_ACCOUNT_SUPPLIER_Desc=The dedicated accounting account defined on third party card will be used for Subledger accounting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated vendor accounting account on third party is not defined.
|
||||
ConfirmCloneTax=Confirm the clone of a social/fiscal tax
|
||||
ConfirmCloneVAT=Confirm the clone of a VAT declaration
|
||||
ConfirmCloneSalary=Confirm the clone of a salary
|
||||
CloneTaxForNextMonth=Clone it for next month
|
||||
SimpleReport=Simple report
|
||||
AddExtraReport=Extra reports (add foreign and national customer report)
|
||||
|
||||
@ -291,4 +291,5 @@ WarningSomeBankTransactionByChequeWereRemovedAfter=Some bank transaction were re
|
||||
WarningFailedToAddFileIntoDatabaseIndex=Warning, failed to add file entry into ECM database index table
|
||||
WarningTheHiddenOptionIsOn=Warning, the hidden option <b>%s</b> is on.
|
||||
WarningCreateSubAccounts=Warning, you can't create directly a sub account, you must create a third party or an user and assign them an accounting code to find them in this list
|
||||
WarningAvailableOnlyForHTTPSServers=Available only if using HTTPS secured connection.
|
||||
WarningAvailableOnlyForHTTPSServers=Available only if using HTTPS secured connection.
|
||||
WarningModuleXDisabledSoYouMayMissEventHere=Module %s has not been enabled. So you may miss a lot of event here.
|
||||
@ -13,7 +13,7 @@ ToReviewCP=Awaiting approval
|
||||
ApprovedCP=Approved
|
||||
CancelCP=Canceled
|
||||
RefuseCP=Refused
|
||||
ValidatorCP=Approbator
|
||||
ValidatorCP=Approver
|
||||
ListeCP=List of leave
|
||||
Leave=Leave request
|
||||
LeaveId=Leave ID
|
||||
@ -39,11 +39,11 @@ TitreRequestCP=Leave request
|
||||
TypeOfLeaveId=Type of leave ID
|
||||
TypeOfLeaveCode=Type of leave code
|
||||
TypeOfLeaveLabel=Type of leave label
|
||||
NbUseDaysCP=Number of days of vacation consumed
|
||||
NbUseDaysCPHelp=The calculation takes into account the non working days and the holidays defined in the dictionary.
|
||||
NbUseDaysCPShort=Days consumed
|
||||
NbUseDaysCPShortInMonth=Days consumed in month
|
||||
DayIsANonWorkingDay=%s is a non working day
|
||||
NbUseDaysCP=Number of days of leave used
|
||||
NbUseDaysCPHelp=The calculation takes into account the non-working days and the holidays defined in the dictionary.
|
||||
NbUseDaysCPShort=Days of leave
|
||||
NbUseDaysCPShortInMonth=Days of leave in month
|
||||
DayIsANonWorkingDay=%s is a non-working day
|
||||
DateStartInMonth=Start date in month
|
||||
DateEndInMonth=End date in month
|
||||
EditCP=Edit
|
||||
@ -55,7 +55,7 @@ TitleDeleteCP=Delete the leave request
|
||||
ConfirmDeleteCP=Confirm the deletion of this leave request?
|
||||
ErrorCantDeleteCP=Error you don't have the right to delete this leave request.
|
||||
CantCreateCP=You don't have the right to make leave requests.
|
||||
InvalidValidatorCP=You must choose an approbator to your leave request.
|
||||
InvalidValidatorCP=You must choose the approver for your leave request.
|
||||
NoDateDebut=You must select a start date.
|
||||
NoDateFin=You must select an end date.
|
||||
ErrorDureeCP=Your leave request does not contain working day.
|
||||
@ -80,14 +80,14 @@ UserCP=User
|
||||
ErrorAddEventToUserCP=An error occurred while adding the exceptional leave.
|
||||
AddEventToUserOkCP=The addition of the exceptional leave has been completed.
|
||||
MenuLogCP=View change logs
|
||||
LogCP=Log of updates of available vacation days
|
||||
ActionByCP=Performed by
|
||||
UserUpdateCP=For the user
|
||||
LogCP=Log of all updates made to "Balance of Leave"
|
||||
ActionByCP=Updated by
|
||||
UserUpdateCP=Updated for
|
||||
PrevSoldeCP=Previous Balance
|
||||
NewSoldeCP=New Balance
|
||||
alreadyCPexist=A leave request has already been done on this period.
|
||||
FirstDayOfHoliday=First day of vacation
|
||||
LastDayOfHoliday=Last day of vacation
|
||||
FirstDayOfHoliday=Beginning day of leave request
|
||||
LastDayOfHoliday=Ending day of leave request
|
||||
BoxTitleLastLeaveRequests=Latest %s modified leave requests
|
||||
HolidaysMonthlyUpdate=Monthly update
|
||||
ManualUpdate=Manual update
|
||||
@ -104,8 +104,8 @@ LEAVE_SICK=Sick leave
|
||||
LEAVE_OTHER=Other leave
|
||||
LEAVE_PAID_FR=Paid vacation
|
||||
## Configuration du Module ##
|
||||
LastUpdateCP=Latest automatic update of leave allocation
|
||||
MonthOfLastMonthlyUpdate=Month of latest automatic update of leave allocation
|
||||
LastUpdateCP=Last automatic update of leave allocation
|
||||
MonthOfLastMonthlyUpdate=Month of last automatic update of leave allocation
|
||||
UpdateConfCPOK=Updated successfully.
|
||||
Module27130Name= Management of leave requests
|
||||
Module27130Desc= Management of leave requests
|
||||
@ -125,8 +125,8 @@ HolidaysCanceledBody=Your leave request for %s to %s has been canceled.
|
||||
FollowedByACounter=1: This type of leave need to be followed by a counter. Counter is incremented manually or automatically and when a leave request is validated, counter is decremented.<br>0: Not followed by a counter.
|
||||
NoLeaveWithCounterDefined=There is no leave types defined that need to be followed by a counter
|
||||
GoIntoDictionaryHolidayTypes=Go into <strong>Home - Setup - Dictionaries - Type of leave</strong> to setup the different types of leaves.
|
||||
HolidaySetup=Setup of module Holiday
|
||||
HolidaysNumberingModules=Leave requests numbering models
|
||||
HolidaySetup=Setup of module Leave
|
||||
HolidaysNumberingModules=Numbering models for leave requests
|
||||
TemplatePDFHolidays=Template for leave requests PDF
|
||||
FreeLegalTextOnHolidays=Free text on PDF
|
||||
WatermarkOnDraftHolidayCards=Watermarks on draft leave requests
|
||||
|
||||
@ -726,7 +726,7 @@ MenuMembers=Members
|
||||
MenuAgendaGoogle=Google agenda
|
||||
MenuTaxesAndSpecialExpenses=Taxes | Special expenses
|
||||
ThisLimitIsDefinedInSetup=Dolibarr limit (Menu home-setup-security): %s Kb, PHP limit: %s Kb
|
||||
NoFileFound=No documents saved in this directory
|
||||
NoFileFound=No documents uploaded
|
||||
CurrentUserLanguage=Current language
|
||||
CurrentTheme=Current theme
|
||||
CurrentMenuManager=Current menu manager
|
||||
|
||||
@ -24,3 +24,5 @@ ProductLotSetup=Setup of module lot/serial
|
||||
ShowCurrentStockOfLot=Show current stock for couple product/lot
|
||||
ShowLogOfMovementIfLot=Show log of movements for couple product/lot
|
||||
StockDetailPerBatch=Stock detail per lot
|
||||
SerialNumberAlreadyInUse=Serial number %s is already used for product %s
|
||||
TooManyQtyForSerialNumber=You can only have one product %s for serial number %S
|
||||
|
||||
@ -2,12 +2,15 @@
|
||||
SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=Accounting account used for user third parties
|
||||
SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=The dedicated accounting account defined on user card will be used for Subledger accounting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated user accounting account on user is not defined.
|
||||
SALARIES_ACCOUNTING_ACCOUNT_CHARGE=Accounting account by default for wage payments
|
||||
CREATE_NEW_SALARY_WITHOUT_AUTO_PAYMENT=By default, leave empty the option "Automatically create a total payment" when creating a Salary
|
||||
Salary=Salary
|
||||
Salaries=Salaries
|
||||
NewSalaryPayment=New salary payment
|
||||
NewSalary=New salary
|
||||
NewSalaryPayment=New salary card
|
||||
AddSalaryPayment=Add salary payment
|
||||
SalaryPayment=Salary payment
|
||||
SalariesPayments=Salaries payments
|
||||
SalariesPaymentsOf=Salaries payments of %s
|
||||
ShowSalaryPayment=Show salary payment
|
||||
THM=Average hourly rate
|
||||
TJM=Average daily rate
|
||||
|
||||
@ -33,7 +33,7 @@ ExpenseReportCanceledMessage=The expense report %s was canceled.<br> - User: %s<
|
||||
ExpenseReportPaid=An expense report was paid
|
||||
ExpenseReportPaidMessage=The expense report %s was paid.<br> - User: %s<br> - Paid by: %s<br>Click here to show the expense report: %s
|
||||
TripId=Id expense report
|
||||
AnyOtherInThisListCanValidate=Person to inform for validation.
|
||||
AnyOtherInThisListCanValidate=Person to be informed for validating the request.
|
||||
TripSociete=Information company
|
||||
TripNDF=Informations expense report
|
||||
PDFStandardExpenseReports=Standard template to generate a PDF document for expense report
|
||||
|
||||
@ -131,7 +131,7 @@ InvoiceLinesDone=Lignes de factures liées
|
||||
ExpenseReportLines=Lignes de notes de frais à lier
|
||||
ExpenseReportLinesDone=Lignes de notes de frais liées
|
||||
IntoAccount=Lier ligne avec le compte comptable
|
||||
TotalForAccount=Total pour le compte comptable
|
||||
TotalForAccount=Total compte comptable
|
||||
|
||||
|
||||
Ventilate=Lier
|
||||
|
||||
@ -24,3 +24,5 @@ ProductLotSetup=Configuration du module lot/série
|
||||
ShowCurrentStockOfLot=Afficher le stock actuel pour le couple produit / lot
|
||||
ShowLogOfMovementIfLot=Afficher l'historique des mouvements de couple produit / lot
|
||||
StockDetailPerBatch=Stock détaillé par lot
|
||||
SerialNumberAlreadyInUse=Le numéro de série %s est déjà utilisé pour le produit %s
|
||||
TooManyQtyForSerialNumber=Vous ne pouvez avoir qu'un produit %s avec le numéro de série %s
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=Compte comptable utilisé pour les utilisateurs
|
||||
SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=Le compte comptable défini sur la fiche utilisateur sera utilisé uniquement pour la comptabilité auxiliaire. Celui-ci sera utilisé pour le grand livre et comme valeur par défaut de la comptabilité auxiliaire si le compte dédié de l'utilisateur n'est pas défini.
|
||||
SALARIES_ACCOUNTING_ACCOUNT_CHARGE=Compte comptable par défaut pour les paiements de salaires
|
||||
CREATE_NEW_SALARY_WITHOUT_AUTO_PAYMENT=Par défaut, laisser vide l’option « Créer automatiquement un règlement total » lors de la création d'un Salaire
|
||||
Salary=Salaire
|
||||
Salaries=Salaires
|
||||
NewSalaryPayment=Nouveau règlement de salaire
|
||||
|
||||
@ -356,7 +356,7 @@ class MyObject extends CommonObject
|
||||
|
||||
if (!$error) {
|
||||
// copy external contacts if same company
|
||||
if (property_exists($this, 'socid') && $this->socid == $object->socid) {
|
||||
if (property_exists($this, 'fk_soc') && $this->fk_soc == $object->socid) {
|
||||
if ($this->copy_linked_contact($object, 'external') < 0) {
|
||||
$error++;
|
||||
}
|
||||
|
||||
@ -96,7 +96,7 @@ class Mo extends CommonObject
|
||||
'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-1, 'position'=>1, 'notnull'=>1, 'index'=>1, 'comment'=>"Id",),
|
||||
'entity' => array('type'=>'integer', 'label'=>'Entity', 'enabled'=>1, 'visible'=>0, 'position'=>5, 'notnull'=>1, 'default'=>'1', 'index'=>1),
|
||||
'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>1, 'visible'=>4, 'position'=>10, 'notnull'=>1, 'default'=>'(PROV)', 'index'=>1, 'searchall'=>1, 'comment'=>"Reference of object", 'showoncombobox'=>'1', 'noteditable'=>1),
|
||||
'fk_bom' => array('type'=>'integer:Bom:bom/class/bom.class.php:0:t.status=1', 'filter'=>'active=1', 'label'=>'BOM', 'enabled'=>1, 'visible'=>1, 'position'=>33, 'notnull'=>-1, 'index'=>1, 'comment'=>"Original BOM", 'css'=>'maxwidth300'),
|
||||
'fk_bom' => array('type'=>'integer:Bom:bom/class/bom.class.php:0:t.status=1', 'filter'=>'active=1', 'label'=>'BOM', 'enabled'=>1, 'visible'=>1, 'position'=>33, 'notnull'=>-1, 'index'=>1, 'comment'=>"Original BOM", 'css'=>'minwidth100 maxwidth300'),
|
||||
'fk_product' => array('type'=>'integer:Product:product/class/product.class.php:0', 'label'=>'Product', 'enabled'=>1, 'visible'=>1, 'position'=>35, 'notnull'=>1, 'index'=>1, 'comment'=>"Product to produce", 'css'=>'maxwidth300', 'picto'=>'product'),
|
||||
'qty' => array('type'=>'real', 'label'=>'QtyToProduce', 'enabled'=>1, 'visible'=>1, 'position'=>40, 'notnull'=>1, 'comment'=>"Qty to produce", 'css'=>'width75', 'default'=>1, 'isameasure'=>1),
|
||||
'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>1, 'visible'=>1, 'position'=>42, 'notnull'=>-1, 'searchall'=>1, 'showoncombobox'=>'1',),
|
||||
@ -168,7 +168,7 @@ class Mo extends CommonObject
|
||||
/**
|
||||
* @var string Name of subtable line
|
||||
*/
|
||||
public $table_element_line = 'mo_production';
|
||||
public $table_element_line = 'mrp_production';
|
||||
|
||||
/**
|
||||
* @var string Field with ID of parent key if this field has a parent
|
||||
@ -632,9 +632,21 @@ class Mo extends CommonObject
|
||||
$moline->fk_mo = $this->id;
|
||||
$moline->qty = $this->qty;
|
||||
$moline->fk_product = $this->fk_product;
|
||||
$moline->role = 'toproduce';
|
||||
$moline->position = 1;
|
||||
|
||||
if ($this->fk_bom > 0) { // If a BOM is defined, we know what to consume.
|
||||
include_once DOL_DOCUMENT_ROOT.'/bom/class/bom.class.php';
|
||||
$bom = new Bom($this->db);
|
||||
$bom->fetch($this->fk_bom);
|
||||
if ($bom->bomtype == 1) {
|
||||
$role = 'toproduce';
|
||||
$moline->role = 'toconsume';
|
||||
} else {
|
||||
$role = 'toconsume';
|
||||
$moline->role = 'toproduce';
|
||||
}
|
||||
}
|
||||
|
||||
$resultline = $moline->create($user, false); // Never use triggers here
|
||||
if ($resultline <= 0) {
|
||||
$error++;
|
||||
@ -644,9 +656,6 @@ class Mo extends CommonObject
|
||||
}
|
||||
|
||||
if ($this->fk_bom > 0) { // If a BOM is defined, we know what to consume.
|
||||
include_once DOL_DOCUMENT_ROOT.'/bom/class/bom.class.php';
|
||||
$bom = new Bom($this->db);
|
||||
$bom->fetch($this->fk_bom);
|
||||
if ($bom->id > 0) {
|
||||
// Lines to consume
|
||||
if (!$error) {
|
||||
@ -667,7 +676,7 @@ class Mo extends CommonObject
|
||||
break;
|
||||
} else {
|
||||
$moline->fk_product = $line->fk_product;
|
||||
$moline->role = 'toconsume';
|
||||
$moline->role = $role;
|
||||
$moline->position = $line->position;
|
||||
$moline->qty_frozen = $line->qty_frozen;
|
||||
$moline->disable_stock_change = $line->disable_stock_change;
|
||||
|
||||
@ -76,7 +76,7 @@ $search_array_options = $extrafields->getOptionalsFromPost($object->table_elemen
|
||||
|
||||
// Default sort order (if not yet defined by previous GETPOST)
|
||||
if (!$sortfield) {
|
||||
$sortfield = "t.".key($object->fields); // Set here default search field. By default 1st field in definition.
|
||||
$sortfield = "t.ref"; // Set here default search field. By default 1st field in definition.
|
||||
}
|
||||
if (!$sortorder) {
|
||||
$sortorder = "ASC";
|
||||
|
||||
@ -48,7 +48,7 @@ $confirm = GETPOST('confirm', 'alpha');
|
||||
$cancel = GETPOST('cancel', 'aZ09');
|
||||
$contextpage = GETPOST('contextpage', 'aZ') ?GETPOST('contextpage', 'aZ') : 'mocard'; // To manage different context of search
|
||||
$backtopage = GETPOST('backtopage', 'alpha');
|
||||
//$lineid = GETPOST('lineid', 'int');
|
||||
$lineid = GETPOST('lineid', 'int');
|
||||
|
||||
$collapse = GETPOST('collapse', 'aZ09comma');
|
||||
|
||||
@ -724,6 +724,9 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
||||
}
|
||||
print '</td>';
|
||||
}
|
||||
if ($permissiontodelete) {
|
||||
print '<td></td>';
|
||||
}
|
||||
print '</tr>';
|
||||
|
||||
if ($action == 'addconsumeline') {
|
||||
@ -849,6 +852,17 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
||||
if ($conf->productbatch->enabled) {
|
||||
print '<td></td>'; // Lot
|
||||
}
|
||||
if ($permissiontodelete) {
|
||||
$href = $_SERVER["PHP_SELF"];
|
||||
$href .= '?id='.$object->id;
|
||||
$href .= '&action=deleteline';
|
||||
$href .= '&lineid='.$line->id;
|
||||
print '<td class="center">';
|
||||
print '<a href="'.$href.'">';
|
||||
print img_picto('', "delete");
|
||||
print '</a>';
|
||||
print '</td>';
|
||||
}
|
||||
print '</tr>';
|
||||
|
||||
// Show detailed of already consumed with js code to collapse
|
||||
|
||||
@ -1084,11 +1084,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
|
||||
// Batch number management
|
||||
if (!empty($conf->productbatch->enabled)) {
|
||||
print '<tr><td>'.$langs->trans("ManageLotSerial").'</td><td colspan="3">';
|
||||
if (empty($conf->global ->MAIN_ADVANCE_NUMLOT)) {
|
||||
$statutarray = array('0' => $langs->trans("ProductStatusNotOnBatch"), '1' => $langs->trans("ProductStatusOnBatch"));
|
||||
} else {
|
||||
$statutarray = array('0' => $langs->trans("ProductStatusNotOnBatch"), '1' => $langs->trans("ProductStatusOnBatch"), '2' => $langs->trans("ProductStatusOnSerial"));
|
||||
}
|
||||
$statutarray = array('0' => $langs->trans("ProductStatusNotOnBatch"), '1' => $langs->trans("ProductStatusOnBatch"), '2' => $langs->trans("ProductStatusOnSerial"));
|
||||
print $form->selectarray('status_batch', $statutarray, GETPOST('status_batch'));
|
||||
print '</td></tr>';
|
||||
}
|
||||
@ -1548,11 +1544,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
|
||||
if ($conf->productbatch->enabled) {
|
||||
if ($object->isProduct() || !empty($conf->global->STOCK_SUPPORTS_SERVICES)) {
|
||||
print '<tr><td>'.$langs->trans("ManageLotSerial").'</td><td colspan="3">';
|
||||
if (empty($conf->global ->MAIN_ADVANCE_NUMLOT)) {
|
||||
$statutarray = array('0' => $langs->trans("ProductStatusNotOnBatch"), '1' => $langs->trans("ProductStatusOnBatch"));
|
||||
} else {
|
||||
$statutarray = array('0' => $langs->trans("ProductStatusNotOnBatch"), '1' => $langs->trans("ProductStatusOnBatch"), '2' => $langs->trans("ProductStatusOnSerial"));
|
||||
}
|
||||
$statutarray = array('0' => $langs->trans("ProductStatusNotOnBatch"), '1' => $langs->trans("ProductStatusOnBatch"), '2' => $langs->trans("ProductStatusOnSerial"));
|
||||
print $form->selectarray('status_batch', $statutarray, $object->status_batch);
|
||||
print '</td></tr>';
|
||||
}
|
||||
@ -2040,11 +2032,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
|
||||
if (!empty($conf->productbatch->enabled)) {
|
||||
if ($object->isProduct() || !empty($conf->global->STOCK_SUPPORTS_SERVICES)) {
|
||||
print '<tr><td>'.$langs->trans("ManageLotSerial").'</td><td colspan="2">';
|
||||
if (!empty($conf->use_javascript_ajax) && $usercancreate && !empty($conf->global->MAIN_DIRECT_STATUS_UPDATE) && empty($conf->global->MAIN_ADVANCE_NUMLOT)) {
|
||||
print ajax_object_onoff($object, 'status_batch', 'tobatch', 'ProductStatusOnBatch', 'ProductStatusNotOnBatch');
|
||||
} else {
|
||||
print $object->getLibStatut(0, 2);
|
||||
}
|
||||
print $object->getLibStatut(0, 2);
|
||||
print '</td></tr>';
|
||||
}
|
||||
}
|
||||
|
||||
@ -165,9 +165,10 @@ class Products extends DolibarrApi
|
||||
* @param int $mode Use this param to filter list (0 for all, 1 for only product, 2 for only service)
|
||||
* @param int $category Use this param to filter list by category
|
||||
* @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.tobuy:=:0) and (t.tosell:=:1)"
|
||||
* @param bool $ids_only Return only IDs of product instead of all properties (faster, above all if list is long)
|
||||
* @return array Array of product objects
|
||||
*/
|
||||
public function index($sortfield = "t.ref", $sortorder = 'ASC', $limit = 100, $page = 0, $mode = 0, $category = 0, $sqlfilters = '')
|
||||
public function index($sortfield = "t.ref", $sortorder = 'ASC', $limit = 100, $page = 0, $mode = 0, $category = 0, $sqlfilters = '', $ids_only = false)
|
||||
{
|
||||
global $db, $conf;
|
||||
|
||||
@ -219,9 +220,13 @@ class Products extends DolibarrApi
|
||||
$i = 0;
|
||||
while ($i < $min) {
|
||||
$obj = $this->db->fetch_object($result);
|
||||
$product_static = new Product($this->db);
|
||||
if ($product_static->fetch($obj->rowid)) {
|
||||
$obj_ret[] = $this->_cleanObjectDatas($product_static);
|
||||
if (!$ids_only) {
|
||||
$product_static = new Product($this->db);
|
||||
if ($product_static->fetch($obj->rowid)) {
|
||||
$obj_ret[] = $this->_cleanObjectDatas($product_static);
|
||||
}
|
||||
} else {
|
||||
$obj_ret[] = $obj->rowid;
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
@ -1794,24 +1799,24 @@ class Products extends DolibarrApi
|
||||
}
|
||||
|
||||
/**
|
||||
* Get properties of a product object
|
||||
*
|
||||
* Get properties of 1 product object.
|
||||
* Return an array with product information.
|
||||
*
|
||||
* @param int $id ID of product
|
||||
* @param string $ref Ref of element
|
||||
* @param string $ref_ext Ref ext of element
|
||||
* @param string $barcode Barcode of element
|
||||
* @param int $includestockdata Load also information about stock (slower)
|
||||
* @param bool $includesubproducts Load information about subproducts (if product is a virtual product)
|
||||
* @param bool $includeparentid Load also ID of parent product (if product is a variant of a parent product)
|
||||
* @return array|mixed Data without useless information
|
||||
* @param int $id ID of product
|
||||
* @param string $ref Ref of element
|
||||
* @param string $ref_ext Ref ext of element
|
||||
* @param string $barcode Barcode of element
|
||||
* @param int $includestockdata Load also information about stock (slower)
|
||||
* @param bool $includesubproducts Load information about subproducts (if product is a virtual product)
|
||||
* @param bool $includeparentid Load also ID of parent product (if product is a variant of a parent product)
|
||||
* @param bool $includeifobjectisused Check if product object is used and set is_object_used with result.
|
||||
* @return array|mixed Data without useless information
|
||||
*
|
||||
* @throws RestException 401
|
||||
* @throws RestException 403
|
||||
* @throws RestException 404
|
||||
*/
|
||||
private function _fetch($id, $ref = '', $ref_ext = '', $barcode = '', $includestockdata = 0, $includesubproducts = false, $includeparentid = false)
|
||||
private function _fetch($id, $ref = '', $ref_ext = '', $barcode = '', $includestockdata = 0, $includesubproducts = false, $includeparentid = false, $includeifobjectisused = false)
|
||||
{
|
||||
if (empty($id) && empty($ref) && empty($ref_ext) && empty($barcode)) {
|
||||
throw new RestException(400, 'bad value for parameter id, ref, ref_ext or barcode');
|
||||
@ -1866,6 +1871,10 @@ class Products extends DolibarrApi
|
||||
}
|
||||
}
|
||||
|
||||
if ($includeifobjectisused) {
|
||||
$this->product->is_object_used = ($this->product->isObjectUsed() > 0);
|
||||
}
|
||||
|
||||
return $this->_cleanObjectDatas($this->product);
|
||||
}
|
||||
}
|
||||
|
||||
@ -92,10 +92,10 @@ class Product extends CommonObject
|
||||
|
||||
public $regeximgext = '\.gif|\.jpg|\.jpeg|\.png|\.bmp|\.webp|\.xpm|\.xbm'; // See also into images.lib.php
|
||||
|
||||
/*
|
||||
* @deprecated
|
||||
* @see label
|
||||
*/
|
||||
/**
|
||||
* @deprecated
|
||||
* @see $label
|
||||
*/
|
||||
public $libelle;
|
||||
|
||||
/**
|
||||
@ -407,6 +407,14 @@ class Product extends CommonObject
|
||||
*/
|
||||
public $supplierprices;
|
||||
|
||||
/**
|
||||
* Property set to save result of isObjectUsed(). Used for example by Product API.
|
||||
*
|
||||
* @var boolean
|
||||
*/
|
||||
public $is_object_used;
|
||||
|
||||
|
||||
/**
|
||||
* @var array fields of object product
|
||||
*/
|
||||
@ -4747,10 +4755,10 @@ class Product extends CommonObject
|
||||
if ($type == 2) {
|
||||
switch ($mode) {
|
||||
case 0:
|
||||
$label = ($status == 0 ? $langs->trans('ProductStatusNotOnBatch') : ($status == 1 || empty($conf->global->MAIN_ADVANCE_NUMLOT) ? $langs->trans('ProductStatusOnBatch') : $langs->trans('ProductStatusOnSerial')));
|
||||
$label = ($status == 0 ? $langs->trans('ProductStatusNotOnBatch') : ($status == 1 ? $langs->trans('ProductStatusOnBatch') : $langs->trans('ProductStatusOnSerial')));
|
||||
return dolGetStatus($label);
|
||||
case 1:
|
||||
$label = ($status == 0 ? $langs->trans('ProductStatusNotOnBatchShort') : ($status == 1 || empty($conf->global->MAIN_ADVANCE_NUMLOT) ? $langs->trans('ProductStatusOnBatchShort') : $langs->trans('ProductStatusOnSerialShort')));
|
||||
$label = ($status == 0 ? $langs->trans('ProductStatusNotOnBatchShort') : ($status == 1 ? $langs->trans('ProductStatusOnBatchShort') : $langs->trans('ProductStatusOnSerialShort')));
|
||||
return dolGetStatus($label);
|
||||
case 2:
|
||||
return $this->LibStatut($status, 3, 2).' '.$this->LibStatut($status, 1, 2);
|
||||
@ -4788,10 +4796,10 @@ class Product extends CommonObject
|
||||
$labelStatus = $langs->trans('ProductStatusOnBuyShort');
|
||||
$labelStatusShort = $langs->trans('ProductStatusOnBuy');
|
||||
} elseif ($type == 2) {
|
||||
$labelStatus = ($status == 1 || empty($conf->global->MAIN_ADVANCE_NUMLOT) ? $langs->trans('ProductStatusOnBatch') : $langs->trans('ProductStatusOnSerial'));
|
||||
$labelStatusShort = ($status == 1 || empty($conf->global->MAIN_ADVANCE_NUMLOT) ? $langs->trans('ProductStatusOnBatchShort') : $langs->trans('ProductStatusOnSerialShort'));
|
||||
$labelStatus = ($status == 1 ? $langs->trans('ProductStatusOnBatch') : $langs->trans('ProductStatusOnSerial'));
|
||||
$labelStatusShort = ($status == 1 ? $langs->trans('ProductStatusOnBatchShort') : $langs->trans('ProductStatusOnSerialShort'));
|
||||
}
|
||||
} elseif (! empty($conf->global->MAIN_ADVANCE_NUMLOT) && $type == 2 && $status == 2) {
|
||||
} elseif ( $type == 2 && $status == 2 ) {
|
||||
$labelStatus = $langs->trans('ProductStatusOnSerial');
|
||||
$labelStatusShort = $langs->trans('ProductStatusOnSerialShort');
|
||||
}
|
||||
|
||||
@ -425,7 +425,6 @@ if ($object->id > 0) {
|
||||
print '</tr>';
|
||||
|
||||
// Line to add a new line in inventory
|
||||
//if ($action == 'addline') {
|
||||
if ($object->status == $object::STATUS_VALIDATED) {
|
||||
print '<tr>';
|
||||
print '<td>';
|
||||
|
||||
@ -971,18 +971,13 @@ if ($resql) {
|
||||
// To batch
|
||||
if (!empty($arrayfields['p.tobatch']['checked'])) {
|
||||
print '<td class="liste_titre center">';
|
||||
|
||||
if (empty($conf->global ->MAIN_ADVANCE_NUMLOT)) {
|
||||
print $form->selectyesno('search_tobatch', $search_tobatch, 1, false, 1);
|
||||
} else {
|
||||
$statutarray = array(
|
||||
'-1' => '',
|
||||
'0' => $langs->trans("ProductStatusNotOnBatchShort"),
|
||||
'1' => $langs->trans("ProductStatusOnBatchShort"),
|
||||
'2' => $langs->trans("ProductStatusOnSerialShort")
|
||||
);
|
||||
print $form->selectarray('search_tobatch', $statutarray, $search_tobatch);
|
||||
}
|
||||
$statutarray = array(
|
||||
'-1' => '',
|
||||
'0' => $langs->trans("ProductStatusNotOnBatchShort"),
|
||||
'1' => $langs->trans("ProductStatusOnBatchShort"),
|
||||
'2' => $langs->trans("ProductStatusOnSerialShort")
|
||||
);
|
||||
print $form->selectarray('search_tobatch', $statutarray, $search_tobatch);
|
||||
print '</td>';
|
||||
}
|
||||
// Country
|
||||
@ -1672,11 +1667,7 @@ if ($resql) {
|
||||
// Lot/Serial
|
||||
if (!empty($arrayfields['p.tobatch']['checked'])) {
|
||||
print '<td class="center">';
|
||||
if (empty($conf->global->MAIN_ADVANCE_NUMLOT)) {
|
||||
print yn($obj->tobatch);
|
||||
} else {
|
||||
print $product_static->getLibStatut(1, 2);
|
||||
}
|
||||
print $product_static->getLibStatut(1, 2);
|
||||
print '</td>';
|
||||
if (!$i) {
|
||||
$totalarray['nbfield']++;
|
||||
|
||||
@ -1185,6 +1185,7 @@ if ($action == 'edit_price' && $object->getRights()->creer) {
|
||||
|
||||
print dol_get_fiche_head('');
|
||||
|
||||
print '<div class="div-table-responsive-no-min">';
|
||||
print '<table class="border centpercent">';
|
||||
|
||||
// VAT
|
||||
@ -1271,6 +1272,7 @@ if ($action == 'edit_price' && $object->getRights()->creer) {
|
||||
$reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||
|
||||
print '</table>';
|
||||
print '</div>';
|
||||
|
||||
print dol_get_fiche_end();
|
||||
|
||||
@ -1318,6 +1320,7 @@ if ($action == 'edit_price' && $object->getRights()->creer) {
|
||||
print $langs->trans('UseMultipriceRules').' <input type="checkbox" id="usePriceRules" name="usePriceRules" '.($object->price_autogen ? 'checked' : '').'><br><br>';
|
||||
}
|
||||
|
||||
print '<div class="div-table-responsive-no-min">';
|
||||
print '<table class="noborder">';
|
||||
print '<thead><tr class="liste_titre">';
|
||||
|
||||
@ -1392,6 +1395,7 @@ if ($action == 'edit_price' && $object->getRights()->creer) {
|
||||
print '</tbody>';
|
||||
|
||||
print '</table>';
|
||||
print '</div>';
|
||||
|
||||
//print dol_get_fiche_end();
|
||||
|
||||
@ -1493,7 +1497,7 @@ if ((empty($conf->global->PRODUIT_CUSTOMER_PRICES) || $action == 'showlog_defaul
|
||||
|
||||
print '<tr class="oddeven">';
|
||||
// Date
|
||||
print "<td>".dol_print_date($db->jdate($objp->dp), "dayhour")."</td>";
|
||||
print "<td>".dol_print_date($db->jdate($objp->dp), "dayhour", 'tzuserrel')."</td>";
|
||||
|
||||
// Price level
|
||||
if (!empty($conf->global->PRODUIT_MULTIPRICES) || !empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES)) {
|
||||
@ -1665,13 +1669,11 @@ if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
|
||||
print '<input type="hidden" name="action" value="add_customer_price_confirm">';
|
||||
print '<input type="hidden" name="id" value="'.$object->id.'">';
|
||||
|
||||
print dol_get_fiche_head();
|
||||
|
||||
print '<table class="liste centpercent">';
|
||||
print '<tr>';
|
||||
print '<td class="fieldrequired">'.$langs->trans('ThirdParty').'</td>';
|
||||
print '<td>';
|
||||
print $form->select_company('', 'socid', 's.client IN (1,2,3)', 'SelectThirdParty', 0, 0, array(), 0, 'minwidth300');
|
||||
print img_picto('', 'company').$form->select_company('', 'socid', 's.client IN (1,2,3)', 'SelectThirdParty', 0, 0, array(), 0, 'minwidth300');
|
||||
print '</td>';
|
||||
print '</tr>';
|
||||
|
||||
@ -1721,14 +1723,13 @@ if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
|
||||
|
||||
print '</table>';
|
||||
|
||||
print dol_get_fiche_end();
|
||||
|
||||
print '<div class="center">';
|
||||
|
||||
// Update all child soc
|
||||
print '<div class="marginbottomonly">';
|
||||
print '<input type="checkbox" name="updatechildprice" value="1"> ';
|
||||
print $langs->trans('ForceUpdateChildPriceSoc');
|
||||
print '<input type="checkbox" name="updatechildprice" id="updatechildprice" value="1"> ';
|
||||
print '<label for="updatechildprice">'.$langs->trans('ForceUpdateChildPriceSoc').'</label>';
|
||||
print '</div>';
|
||||
|
||||
print '<input type="submit" class="button button-save" value="'.$langs->trans("Save").'">';
|
||||
@ -1753,14 +1754,12 @@ if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
|
||||
print '<input type="hidden" name="action" value="update_customer_price_confirm">';
|
||||
print '<input type="hidden" name="lineid" value="'.$prodcustprice->id.'">';
|
||||
|
||||
print dol_get_fiche_head();
|
||||
|
||||
print '<table class="liste centpercent">';
|
||||
print '<tr>';
|
||||
print '<td class="titlefield">'.$langs->trans('ThirdParty').'</td>';
|
||||
print '<td class="titlefield fieldrequired">'.$langs->trans('ThirdParty').'</td>';
|
||||
$staticsoc = new Societe($db);
|
||||
$staticsoc->fetch($prodcustprice->fk_soc);
|
||||
print "<td colspan='2'>".$staticsoc->getNomUrl(1)."</td>";
|
||||
print "<td>".$staticsoc->getNomUrl(1)."</td>";
|
||||
print '</tr>';
|
||||
|
||||
// Ref. Customer
|
||||
@ -1768,12 +1767,12 @@ if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
|
||||
print '<td><input name="ref_customer" size="12" value="' . dol_escape_htmltag($prodcustprice->ref_customer) . '"></td></tr>';
|
||||
|
||||
// VAT
|
||||
print '<tr><td>'.$langs->trans("DefaultTaxRate").'</td><td colspan="2">';
|
||||
print '<tr><td class="fieldrequired">'.$langs->trans("DefaultTaxRate").'</td><td>';
|
||||
print $form->load_tva("tva_tx", $prodcustprice->default_vat_code ? $prodcustprice->tva_tx.' ('.$prodcustprice->default_vat_code.')' : $prodcustprice->tva_tx, $mysoc, '', $object->id, $prodcustprice->recuperableonly, $object->type, false, 1);
|
||||
print '</td></tr>';
|
||||
|
||||
// Price base
|
||||
print '<tr><td>';
|
||||
print '<tr><td class="fieldrequired">';
|
||||
print $langs->trans('PriceBase');
|
||||
print '</td>';
|
||||
print '<td>';
|
||||
@ -1782,7 +1781,7 @@ if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
|
||||
print '</tr>';
|
||||
|
||||
// Price
|
||||
print '<tr><td>';
|
||||
print '<tr><td class="fieldrequired">';
|
||||
$text = $langs->trans('SellingPrice');
|
||||
print $form->textwithpicto($text, $langs->trans("PrecisionUnitIsLimitedToXDecimals", $conf->global->MAIN_MAX_DECIMALS_UNIT), 1, 1);
|
||||
print '</td><td>';
|
||||
@ -1809,21 +1808,13 @@ if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
|
||||
}
|
||||
print '</tr>';
|
||||
|
||||
// Update all child soc
|
||||
print '<tr><td>';
|
||||
print '</td>';
|
||||
print '<td>';
|
||||
print '</td>';
|
||||
print '</tr>';
|
||||
|
||||
print '</table>';
|
||||
|
||||
print dol_get_fiche_end();
|
||||
|
||||
print '<div class="center">';
|
||||
print '<div class="marginbottomonly">';
|
||||
print '<input type="checkbox" name="updatechildprice" value="1"> ';
|
||||
print $langs->trans('ForceUpdateChildPriceSoc');
|
||||
print '<input type="checkbox" name="updatechildprice" id="updatechildprice" value="1"> ';
|
||||
print '<label for="updatechildprice">'.$langs->trans('ForceUpdateChildPriceSoc').'</label>';
|
||||
print "</div>";
|
||||
|
||||
print '<input type="submit" class="button button-save" value="'.$langs->trans("Save").'">';
|
||||
@ -1866,6 +1857,7 @@ if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
|
||||
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||
print '<input type="hidden" name="id" value="'.$object->id.'">';
|
||||
|
||||
print '<div class="div-table-responsive-no-min">';
|
||||
print '<table class="liste centpercent">';
|
||||
|
||||
print '<tr class="liste_titre">';
|
||||
@ -1915,8 +1907,8 @@ if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
|
||||
print '<tr class="oddeven">';
|
||||
|
||||
print "<td>".$staticsoc->getNomUrl(1)."</td>";
|
||||
print '<td>' . $line->ref_customer . '</td>';
|
||||
print "<td>".dol_print_date($line->datec, "dayhour")."</td>";
|
||||
print '<td>'.$line->ref_customer.'</td>';
|
||||
print "<td>".dol_print_date($line->datec, "dayhour", 'tzuserrel')."</td>";
|
||||
print '<td class="center">'.$langs->trans($line->price_base_type)."</td>";
|
||||
print '<td class="right">';
|
||||
|
||||
@ -1960,6 +1952,7 @@ if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
|
||||
print '</tr>';
|
||||
}
|
||||
print "</table>";
|
||||
print '</div>';
|
||||
} else {
|
||||
print $langs->trans('None');
|
||||
}
|
||||
@ -1986,6 +1979,7 @@ if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
|
||||
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||
print '<input type="hidden" name="id" value="'.$object->id.'">';
|
||||
|
||||
print '<div class="div-table-responsive-no-min">';
|
||||
print '<table class="liste centpercent">';
|
||||
|
||||
if (count($prodcustprice->lines) > 0 || $search_soc) {
|
||||
@ -2020,7 +2014,7 @@ if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
|
||||
print '<td class="right">'.$langs->trans("MinPrice").' '.$langs->trans("HT").'</td>';
|
||||
print '<td class="right">'.$langs->trans("MinPrice").' '.$langs->trans("TTC").'</td>';
|
||||
print '<td class="right">'.$langs->trans("ChangedBy").'</td>';
|
||||
print '<td> </td>';
|
||||
print '<td></td>';
|
||||
print '</tr>';
|
||||
|
||||
// Line for default price
|
||||
@ -2081,15 +2075,14 @@ if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
|
||||
print '<td class="right">';
|
||||
print '</td>';
|
||||
if ($user->rights->produit->supprimer || $user->rights->service->supprimer) {
|
||||
print '<td class="right">';
|
||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=showlog_default_price&id='.$object->id.'">';
|
||||
print '<td class="nowraponall">';
|
||||
print '<a class="marginleftonly marginrightonly" href="'.$_SERVER["PHP_SELF"].'?action=showlog_default_price&id='.$object->id.'">';
|
||||
print img_info($langs->trans('PriceByCustomerLog'));
|
||||
print '</a>';
|
||||
print ' ';
|
||||
print '<a class="marginleftonly editfielda" href="'.$_SERVER["PHP_SELF"].'?action=edit_price&id='.$object->id.'">';
|
||||
print '<a class="marginleftonly marginrightonly editfielda" href="'.$_SERVER["PHP_SELF"].'?action=edit_price&id='.$object->id.'">';
|
||||
print img_edit('default', 0, 'style="vertical-align: middle;"');
|
||||
print '</a>';
|
||||
print ' ';
|
||||
print '</td>';
|
||||
}
|
||||
print "</tr>\n";
|
||||
@ -2124,8 +2117,7 @@ if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
|
||||
|
||||
print "<td>".$staticsoc->getNomUrl(1)."</td>";
|
||||
print '<td>' . $line->ref_customer . '</td>';
|
||||
print "<td>".dol_print_date($line->datec, "dayhour")."</td>";
|
||||
|
||||
print "<td>".dol_print_date($line->datec, "dayhour", 'tzuserrel')."</td>";
|
||||
print '<td class="center">'.$langs->trans($line->price_base_type)."</td>";
|
||||
print '<td class="right">';
|
||||
|
||||
@ -2142,6 +2134,7 @@ if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
|
||||
if (empty($positiverates)) {
|
||||
$positiverates = '0';
|
||||
}
|
||||
|
||||
echo vatrate($positiverates.($line->default_vat_code ? ' ('.$line->default_vat_code.')' : ''), '%', ($line->tva_npr ? $line->tva_npr : $line->recuperableonly));
|
||||
|
||||
print "</td>";
|
||||
@ -2185,16 +2178,9 @@ if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
|
||||
print "</tr>\n";
|
||||
}
|
||||
}
|
||||
/*else
|
||||
{
|
||||
$colspan=9;
|
||||
if ($user->rights->produit->supprimer || $user->rights->service->supprimer) $colspan+=1;
|
||||
print "<tr ".$bc[false].">";
|
||||
print '<td colspan="'.$colspan.'">'.$langs->trans('None').'</td>';
|
||||
print "</tr>";
|
||||
}*/
|
||||
|
||||
print "</table>";
|
||||
print '</div>';
|
||||
|
||||
print "</form>";
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user