Merge remote-tracking branch 'Dolibarr/14.0' into 14
This commit is contained in:
commit
eae624efec
42
ChangeLog
42
ChangeLog
@ -7,7 +7,7 @@ English Dolibarr ChangeLog
|
|||||||
|
|
||||||
For users:
|
For users:
|
||||||
----------
|
----------
|
||||||
NEW: Module Recruitement to follow application to job positions is now stable.
|
NEW: Module Recruitment to follow application to job positions is now stable.
|
||||||
NEW: Feature to make Stock Inventories
|
NEW: Feature to make Stock Inventories
|
||||||
NEW: Several security issues after a second private bug hunting campaign.
|
NEW: Several security issues after a second private bug hunting campaign.
|
||||||
NEW: A lot of fix into english text after a small proofreading campaign (still not perfect, but really better)
|
NEW: A lot of fix into english text after a small proofreading campaign (still not perfect, but really better)
|
||||||
@ -50,7 +50,7 @@ NEW: Make public bookmarks editable by admin users only
|
|||||||
NEW: If main logo not defined, can use the squarred logo on login page
|
NEW: If main logo not defined, can use the squarred logo on login page
|
||||||
NEW: The manifest file can use the squared image if available
|
NEW: The manifest file can use the squared image if available
|
||||||
NEW: Enhance the multicurrency rate editor
|
NEW: Enhance the multicurrency rate editor
|
||||||
NEW: Normalyse Type company field with ajax combobox
|
NEW: Normalise Type company field with ajax combobox
|
||||||
NEW: preload product description on selection for customer propal/order/invoice
|
NEW: preload product description on selection for customer propal/order/invoice
|
||||||
NEW: Search usergroups & resources
|
NEW: Search usergroups & resources
|
||||||
NEW: Setup Page for module creation with module builder enhancement #FoundationFunding
|
NEW: Setup Page for module creation with module builder enhancement #FoundationFunding
|
||||||
@ -67,14 +67,15 @@ NEW: #16378 more E-Mail Contact substitution Values for better salutation
|
|||||||
NEW: option to keep the "Automatically create the payment" checkbox empty on the tax creation page
|
NEW: option to keep the "Automatically create the payment" checkbox empty on the tax creation page
|
||||||
|
|
||||||
Accountancy
|
Accountancy
|
||||||
NEW: Accountancy - Add FEC import
|
NEW: Add FEC import
|
||||||
NEW: Accountancy - Add a confirmation form with options on export
|
NEW: Add a confirmation form with options on export (for notified export and validate operations)
|
||||||
NEW: Accountancy - Add select date from/to in already bind customer and supplier list
|
NEW: Add select date from/to in already bind customer and supplier list
|
||||||
NEW: Accountancy - Format FEC - Add new field DateLimitReglmt
|
NEW: FEC / FEC2 export - Add new field DateLimitReglmt
|
||||||
NEW: Accountancy - In ledger & journals, show link on bank transaction
|
NEW: In ledger & journals, show link on bank transaction
|
||||||
NEW: Accountancy - Possibility to filter on journals in balance
|
NEW: Possibility to filter on journals in balance
|
||||||
NEW: Accountancy - Add a page to list subledger accounts
|
NEW: Add a page to list subledger accounts
|
||||||
NEW: Multiselect ledger account code filter on book keeping list
|
NEW: Multiselect journal code filter on journal / balance / ledger
|
||||||
|
NEW: Add first step to close fiscal year
|
||||||
|
|
||||||
Agenda
|
Agenda
|
||||||
NEW: add support for Friday as a non working day
|
NEW: add support for Friday as a non working day
|
||||||
@ -93,7 +94,7 @@ NEW: can filter files in ECM/GED on status Shared / Not shared
|
|||||||
NEW: add a check to avoid an invoice date in the future
|
NEW: add a check to avoid an invoice date in the future
|
||||||
NEW: add the total of margin in invoice list
|
NEW: add the total of margin in invoice list
|
||||||
NEW: can set a percentage when creating an invoice from another object
|
NEW: can set a percentage when creating an invoice from another object
|
||||||
NEW: Support down payment on supplier invoice (& somes ajustments)
|
NEW: Support down payment on supplier invoice (& some adjustments)
|
||||||
|
|
||||||
Margin
|
Margin
|
||||||
NEW: add the total of margin in invoice list
|
NEW: add the total of margin in invoice list
|
||||||
@ -162,7 +163,7 @@ NEW: Add a security center page with all information and advices related to the
|
|||||||
NEW: Add a performance center page with all information and advices related to the performance of your instance
|
NEW: Add a performance center page with all information and advices related to the performance of your instance
|
||||||
|
|
||||||
Modules
|
Modules
|
||||||
NEW: Module Recruitement is now stable
|
NEW: Module Recruitment is now stable
|
||||||
NEW: start new experimental module Event Organization Management
|
NEW: start new experimental module Event Organization Management
|
||||||
NEW: start new experimental module Partnership Management
|
NEW: start new experimental module Partnership Management
|
||||||
NEW: start new experimental module Knowledge Management
|
NEW: start new experimental module Knowledge Management
|
||||||
@ -171,11 +172,14 @@ NEW: Check update availability for externals modules using a button on module pa
|
|||||||
Module SimplePOS is deprecated - TakePOS is recommended for the future
|
Module SimplePOS is deprecated - TakePOS is recommended for the future
|
||||||
|
|
||||||
new Options
|
new Options
|
||||||
NEW: add option CONTRACT_ALLOW_EXTERNAL_DOWNLOAD to make generated doc automatically shared
|
NEW: add option CONTRACT_ALLOW_EXTERNAL_DOWNLOAD to make generated doc automatically shared
|
||||||
NEW: add option SUPPLIER_PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD to make generated doc automatically shared
|
NEW: add option SUPPLIER_PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD to make generated doc automatically shared
|
||||||
NEW: add option MAIN_SECURITY_ANTI_SSRF_SERVER_IP to define list of IPs that are local IPs
|
NEW: add option MAIN_SECURITY_ANTI_SSRF_SERVER_IP to define list of IPs that are local IPs
|
||||||
NEW: add option SOCIETE_DISABLE_WORKFORCE to hide staff field
|
NEW: add option SOCIETE_DISABLE_WORKFORCE to hide staff field
|
||||||
NEW: add constant MAIN_BUGTRACK_URL to set a custom url to redirect to when clicking on link "declare a bug"
|
NEW: add constant MAIN_BUGTRACK_URL to set a custom url to redirect to when clicking on link "declare a bug"
|
||||||
|
NEW: add constant ACCOUNTANCY_USE_PRODUCT_ACCOUNT_ON_THIRDPARTY to manage binding with accountancy account declared on thirdparty card
|
||||||
|
NEW: add constant MAIN_PRODUCT_PERENTITY_SHARED to manage some informations (Accounting account) when product is shared on several entities
|
||||||
|
NEW: add constant MAIN_COMPANY_PERENTITY_SHARED to manage some informations (Accounting account) when company is shared on several entities
|
||||||
|
|
||||||
|
|
||||||
For developers:
|
For developers:
|
||||||
@ -209,7 +213,7 @@ NEW: hook printFieldListTitle for cabyprodserv.php
|
|||||||
NEW: hook to allow external modules to add their own shortlist of recent objects
|
NEW: hook to allow external modules to add their own shortlist of recent objects
|
||||||
NEW: SQL-altering hooks in the turnover by product report
|
NEW: SQL-altering hooks in the turnover by product report
|
||||||
NEW: add form confirm hook on company card
|
NEW: add form confirm hook on company card
|
||||||
NEW: add hook addSectionECMAuto method to add custom diretory into ECM auto files
|
NEW: add hook addSectionECMAuto method to add custom directory into ECM auto files
|
||||||
|
|
||||||
|
|
||||||
WARNING:
|
WARNING:
|
||||||
@ -224,7 +228,7 @@ Following changes may create regressions for some external modules, but were nec
|
|||||||
* If your database is PostgreSQL, you must use version 9.1.0 or more (Dolibarr need the SQL function CONCAT)
|
* If your database is PostgreSQL, you must use version 9.1.0 or more (Dolibarr need the SQL function CONCAT)
|
||||||
* If your database is MySQL or MariaDB, you need at least version 5.1
|
* If your database is MySQL or MariaDB, you need at least version 5.1
|
||||||
* Function set_price_level() has been renamed into setPriceLevel() to follow camelcase rules
|
* Function set_price_level() has been renamed into setPriceLevel() to follow camelcase rules
|
||||||
* removed deprecated subtituion key __REFCLIENT__ (replaced with __REF_CLIENT__)
|
* removed deprecated substitution key __REFCLIENT__ (replaced with __REF_CLIENT__)
|
||||||
* Removed constant MAIN_COUNTRIES_IN_EEC. You can now set if country is in Europe or not from the dictionary of countries.
|
* Removed constant MAIN_COUNTRIES_IN_EEC. You can now set if country is in Europe or not from the dictionary of countries.
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -637,6 +637,8 @@ if ($action == 'create') {
|
|||||||
print_liste_field_titre("Credit", "", "", "", "", 'class="right"');
|
print_liste_field_titre("Credit", "", "", "", "", 'class="right"');
|
||||||
if (empty($object->date_validation)) {
|
if (empty($object->date_validation)) {
|
||||||
print_liste_field_titre("Action", "", "", "", "", 'width="60" class="center"');
|
print_liste_field_titre("Action", "", "", "", "", 'width="60" class="center"');
|
||||||
|
} else {
|
||||||
|
print_liste_field_titre("");
|
||||||
}
|
}
|
||||||
|
|
||||||
print "</tr>\n";
|
print "</tr>\n";
|
||||||
@ -683,8 +685,8 @@ if ($action == 'create') {
|
|||||||
print '<td class="right nowraponall amount">'.price($line->debit).'</td>';
|
print '<td class="right nowraponall amount">'.price($line->debit).'</td>';
|
||||||
print '<td class="right nowraponall amount">'.price($line->credit).'</td>';
|
print '<td class="right nowraponall amount">'.price($line->credit).'</td>';
|
||||||
|
|
||||||
if (empty($line->date_export) || empty($line->date_validation)) {
|
print '<td class="center">';
|
||||||
print '<td class="center">';
|
if (empty($line->date_export) && empty($line->date_validation)) {
|
||||||
print '<a class="editfielda reposition" href="' . $_SERVER["PHP_SELF"] . '?action=update&id=' . $line->id . '&piece_num=' . urlencode($line->piece_num) . '&mode=' . urlencode($mode) . '&token=' . urlencode(newToken()) . '">';
|
print '<a class="editfielda reposition" href="' . $_SERVER["PHP_SELF"] . '?action=update&id=' . $line->id . '&piece_num=' . urlencode($line->piece_num) . '&mode=' . urlencode($mode) . '&token=' . urlencode(newToken()) . '">';
|
||||||
print img_edit('', 0, 'class="marginrightonly"');
|
print img_edit('', 0, 'class="marginrightonly"');
|
||||||
print '</a> ';
|
print '</a> ';
|
||||||
@ -713,7 +715,7 @@ if ($action == 'create') {
|
|||||||
setEventMessages(null, array($langs->trans('MvtNotCorrectlyBalanced', $total_debit, $total_credit)), 'warnings');
|
setEventMessages(null, array($langs->trans('MvtNotCorrectlyBalanced', $total_debit, $total_credit)), 'warnings');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty($object->date_export) || empty($object->date_validation)) {
|
if (empty($object->date_export) && empty($object->date_validation)) {
|
||||||
if ($action == "" || $action == 'add') {
|
if ($action == "" || $action == 'add') {
|
||||||
print '<tr class="oddeven">';
|
print '<tr class="oddeven">';
|
||||||
print '<!-- td columns in add mode -->';
|
print '<!-- td columns in add mode -->';
|
||||||
|
|||||||
@ -366,42 +366,42 @@ if (empty($reshook)) {
|
|||||||
if (!empty($search_date_creation_start)) {
|
if (!empty($search_date_creation_start)) {
|
||||||
$filter['t.date_creation>='] = $search_date_creation_start;
|
$filter['t.date_creation>='] = $search_date_creation_start;
|
||||||
$tmp = dol_getdate($search_date_creation_start);
|
$tmp = dol_getdate($search_date_creation_start);
|
||||||
$param .= '&date_creation_startmonth='.urlencode($tmp['mon']).'&date_creation_startday='.urlencode($tmp['mday']).'&date_creation_startyear='.urlencode($tmp['year']);
|
$param .= '&search_date_creation_startmonth='.urlencode($tmp['mon']).'&search_date_creation_startday='.urlencode($tmp['mday']).'&search_date_creation_startyear='.urlencode($tmp['year']);
|
||||||
}
|
}
|
||||||
if (!empty($search_date_creation_end)) {
|
if (!empty($search_date_creation_end)) {
|
||||||
$filter['t.date_creation<='] = $search_date_creation_end;
|
$filter['t.date_creation<='] = $search_date_creation_end;
|
||||||
$tmp = dol_getdate($search_date_creation_end);
|
$tmp = dol_getdate($search_date_creation_end);
|
||||||
$param .= '&date_creation_endmonth='.urlencode($tmp['mon']).'&date_creation_endday='.urlencode($tmp['mday']).'&date_creation_endyear='.urlencode($tmp['year']);
|
$param .= '&search_date_creation_endmonth='.urlencode($tmp['mon']).'&search_date_creation_endday='.urlencode($tmp['mday']).'&search_date_creation_endyear='.urlencode($tmp['year']);
|
||||||
}
|
}
|
||||||
if (!empty($search_date_modification_start)) {
|
if (!empty($search_date_modification_start)) {
|
||||||
$filter['t.tms>='] = $search_date_modification_start;
|
$filter['t.tms>='] = $search_date_modification_start;
|
||||||
$tmp = dol_getdate($search_date_modification_start);
|
$tmp = dol_getdate($search_date_modification_start);
|
||||||
$param .= '&date_modification_startmonth='.urlencode($tmp['mon']).'&date_modification_startday='.urlencode($tmp['mday']).'&date_modification_startyear='.urlencode($tmp['year']);
|
$param .= '&search_date_modification_startmonth='.urlencode($tmp['mon']).'&search_date_modification_startday='.urlencode($tmp['mday']).'&search_date_modification_startyear='.urlencode($tmp['year']);
|
||||||
}
|
}
|
||||||
if (!empty($search_date_modification_end)) {
|
if (!empty($search_date_modification_end)) {
|
||||||
$filter['t.tms<='] = $search_date_modification_end;
|
$filter['t.tms<='] = $search_date_modification_end;
|
||||||
$tmp = dol_getdate($search_date_modification_end);
|
$tmp = dol_getdate($search_date_modification_end);
|
||||||
$param .= '&date_modification_endmonth='.urlencode($tmp['mon']).'&date_modification_endday='.urlencode($tmp['mday']).'&date_modification_endyear='.urlencode($tmp['year']);
|
$param .= '&search_date_modification_endmonth='.urlencode($tmp['mon']).'&search_date_modification_endday='.urlencode($tmp['mday']).'&search_date_modification_endyear='.urlencode($tmp['year']);
|
||||||
}
|
}
|
||||||
if (!empty($search_date_export_start)) {
|
if (!empty($search_date_export_start)) {
|
||||||
$filter['t.date_export>='] = $search_date_export_start;
|
$filter['t.date_export>='] = $search_date_export_start;
|
||||||
$tmp = dol_getdate($search_date_export_start);
|
$tmp = dol_getdate($search_date_export_start);
|
||||||
$param .= '&date_export_startmonth='.urlencode($tmp['mon']).'&date_export_startday='.urlencode($tmp['mday']).'&date_export_startyear='.urlencode($tmp['year']);
|
$param .= '&search_date_export_startmonth='.urlencode($tmp['mon']).'&search_date_export_startday='.urlencode($tmp['mday']).'&search_date_export_startyear='.urlencode($tmp['year']);
|
||||||
}
|
}
|
||||||
if (!empty($search_date_export_end)) {
|
if (!empty($search_date_export_end)) {
|
||||||
$filter['t.date_export<='] = $search_date_export_end;
|
$filter['t.date_export<='] = $search_date_export_end;
|
||||||
$tmp = dol_getdate($search_date_export_end);
|
$tmp = dol_getdate($search_date_export_end);
|
||||||
$param .= '&date_export_endmonth='.urlencode($tmp['mon']).'&date_export_endday='.urlencode($tmp['mday']).'&date_export_endyear='.urlencode($tmp['year']);
|
$param .= '&search_date_export_endmonth='.urlencode($tmp['mon']).'&search_date_export_endday='.urlencode($tmp['mday']).'&search_date_export_endyear='.urlencode($tmp['year']);
|
||||||
}
|
}
|
||||||
if (!empty($search_date_validation_start)) {
|
if (!empty($search_date_validation_start)) {
|
||||||
$filter['t.date_validated>='] = $search_date_validation_start;
|
$filter['t.date_validated>='] = $search_date_validation_start;
|
||||||
$tmp = dol_getdate($search_date_validation_start);
|
$tmp = dol_getdate($search_date_validation_start);
|
||||||
$param .= '&date_validation_startmonth='.urlencode($tmp['mon']).'&date_validation_startday='.urlencode($tmp['mday']).'&date_validation_startyear='.urlencode($tmp['year']);
|
$param .= '&search_date_validation_startmonth='.urlencode($tmp['mon']).'&search_date_validation_startday='.urlencode($tmp['mday']).'&search_date_validation_startyear='.urlencode($tmp['year']);
|
||||||
}
|
}
|
||||||
if (!empty($search_date_validation_end)) {
|
if (!empty($search_date_validation_end)) {
|
||||||
$filter['t.date_validated<='] = $search_date_validation_end;
|
$filter['t.date_validated<='] = $search_date_validation_end;
|
||||||
$tmp = dol_getdate($search_date_validation_end);
|
$tmp = dol_getdate($search_date_validation_end);
|
||||||
$param .= '&date_validation_endmonth='.urlencode($tmp['mon']).'&date_validation_endday='.urlencode($tmp['mday']).'&date_validation_endyear='.urlencode($tmp['year']);
|
$param .= '&search_date_validation_endmonth='.urlencode($tmp['mon']).'&search_date_validation_endday='.urlencode($tmp['mday']).'&search_date_validation_endyear='.urlencode($tmp['year']);
|
||||||
}
|
}
|
||||||
if (!empty($search_debit)) {
|
if (!empty($search_debit)) {
|
||||||
$filter['t.debit'] = $search_debit;
|
$filter['t.debit'] = $search_debit;
|
||||||
@ -904,10 +904,10 @@ print $hookmanager->resPrint;
|
|||||||
if (!empty($arrayfields['t.date_creation']['checked'])) {
|
if (!empty($arrayfields['t.date_creation']['checked'])) {
|
||||||
print '<td class="liste_titre center">';
|
print '<td class="liste_titre center">';
|
||||||
print '<div class="nowrap">';
|
print '<div class="nowrap">';
|
||||||
print $form->selectDate($search_date_creation_start, 'date_creation_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("From"));
|
print $form->selectDate($search_date_creation_start, 'search_date_creation_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("From"));
|
||||||
print '</div>';
|
print '</div>';
|
||||||
print '<div class="nowrap">';
|
print '<div class="nowrap">';
|
||||||
print $form->selectDate($search_date_creation_end, 'date_creation_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("to"));
|
print $form->selectDate($search_date_creation_end, 'search_date_creation_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("to"));
|
||||||
print '</div>';
|
print '</div>';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
}
|
}
|
||||||
@ -915,10 +915,10 @@ if (!empty($arrayfields['t.date_creation']['checked'])) {
|
|||||||
if (!empty($arrayfields['t.tms']['checked'])) {
|
if (!empty($arrayfields['t.tms']['checked'])) {
|
||||||
print '<td class="liste_titre center">';
|
print '<td class="liste_titre center">';
|
||||||
print '<div class="nowrap">';
|
print '<div class="nowrap">';
|
||||||
print $form->selectDate($search_date_modification_start, 'date_modification_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("From"));
|
print $form->selectDate($search_date_modification_start, 'search_date_modification_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("From"));
|
||||||
print '</div>';
|
print '</div>';
|
||||||
print '<div class="nowrap">';
|
print '<div class="nowrap">';
|
||||||
print $form->selectDate($search_date_modification_end, 'date_modification_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("From"));
|
print $form->selectDate($search_date_modification_end, 'search_date_modification_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("From"));
|
||||||
print '</div>';
|
print '</div>';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
}
|
}
|
||||||
@ -926,10 +926,10 @@ if (!empty($arrayfields['t.tms']['checked'])) {
|
|||||||
if (!empty($arrayfields['t.date_export']['checked'])) {
|
if (!empty($arrayfields['t.date_export']['checked'])) {
|
||||||
print '<td class="liste_titre center">';
|
print '<td class="liste_titre center">';
|
||||||
print '<div class="nowrap">';
|
print '<div class="nowrap">';
|
||||||
print $form->selectDate($search_date_export_start, 'date_export_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("From"));
|
print $form->selectDate($search_date_export_start, 'search_date_export_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("From"));
|
||||||
print '</div>';
|
print '</div>';
|
||||||
print '<div class="nowrap">';
|
print '<div class="nowrap">';
|
||||||
print $form->selectDate($search_date_export_end, 'date_export_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("to"));
|
print $form->selectDate($search_date_export_end, 'search_date_export_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("to"));
|
||||||
print '</div>';
|
print '</div>';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
}
|
}
|
||||||
@ -937,10 +937,10 @@ if (!empty($arrayfields['t.date_export']['checked'])) {
|
|||||||
if (!empty($arrayfields['t.date_validated']['checked'])) {
|
if (!empty($arrayfields['t.date_validated']['checked'])) {
|
||||||
print '<td class="liste_titre center">';
|
print '<td class="liste_titre center">';
|
||||||
print '<div class="nowrap">';
|
print '<div class="nowrap">';
|
||||||
print $form->selectDate($search_date_validation_start, 'date_validation_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("From"));
|
print $form->selectDate($search_date_validation_start, 'search_date_validation_start', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("From"));
|
||||||
print '</div>';
|
print '</div>';
|
||||||
print '<div class="nowrap">';
|
print '<div class="nowrap">';
|
||||||
print $form->selectDate($search_date_validation_end, 'date_validation_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("to"));
|
print $form->selectDate($search_date_validation_end, 'search_date_validation_end', 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans("to"));
|
||||||
print '</div>';
|
print '</div>';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
}
|
}
|
||||||
@ -1243,7 +1243,7 @@ while ($i < min($num, $limit)) {
|
|||||||
|
|
||||||
// Action column
|
// Action column
|
||||||
print '<td class="nowraponall center">';
|
print '<td class="nowraponall center">';
|
||||||
if (empty($line->date_export) || empty($line->date_validation)) {
|
if (empty($line->date_export) && empty($line->date_validation)) {
|
||||||
if ($user->rights->accounting->mouvements->creer) {
|
if ($user->rights->accounting->mouvements->creer) {
|
||||||
print '<a class="editfielda paddingleft marginrightonly" href="' . DOL_URL_ROOT . '/accountancy/bookkeeping/card.php?piece_num=' . $line->piece_num . $param . '&page=' . $page . ($sortfield ? '&sortfield=' . $sortfield : '') . ($sortorder ? '&sortorder=' . $sortorder : '') . '">' . img_edit() . '</a>';
|
print '<a class="editfielda paddingleft marginrightonly" href="' . DOL_URL_ROOT . '/accountancy/bookkeeping/card.php?piece_num=' . $line->piece_num . $param . '&page=' . $page . ($sortfield ? '&sortfield=' . $sortfield : '') . ($sortorder ? '&sortorder=' . $sortorder : '') . '">' . img_edit() . '</a>';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -852,12 +852,14 @@ while ($i < min($num, $limit)) {
|
|||||||
|
|
||||||
// Action column
|
// Action column
|
||||||
print '<td class="nowraponall center">';
|
print '<td class="nowraponall center">';
|
||||||
if (empty($line->date_export)) {
|
if (empty($line->date_export) && empty($line->date_validation)) {
|
||||||
if ($user->rights->accounting->mouvements->creer) {
|
if ($user->rights->accounting->mouvements->creer) {
|
||||||
print '<a class="editfielda" href="'.DOL_URL_ROOT.'/accountancy/bookkeeping/card.php?piece_num='.$line->piece_num.$param.'&page='.$page.($sortfield ? '&sortfield='.$sortfield : '').($sortorder ? '&sortorder='.$sortorder : '').'">'.img_edit().'</a>';
|
print '<a class="editfielda paddingleft marginrightonly" href="' . DOL_URL_ROOT . '/accountancy/bookkeeping/card.php?piece_num=' . $line->piece_num . $param . '&page=' . $page . ($sortfield ? '&sortfield=' . $sortfield : '') . ($sortorder ? '&sortorder=' . $sortorder : '') . '">' . img_edit() . '</a>';
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (empty($line->date_validation)) {
|
||||||
if ($user->rights->accounting->mouvements->supprimer) {
|
if ($user->rights->accounting->mouvements->supprimer) {
|
||||||
print ' <a class="paddingleft" href="'.$_SERVER['PHP_SELF'].'?action=delmouv&mvt_num='.$line->piece_num.$param.'&page='.$page.($sortfield ? '&sortfield='.$sortfield : '').($sortorder ? '&sortorder='.$sortorder : '').'">'.img_delete().'</a>';
|
print '<a class="reposition paddingleft marginrightonly" href="'.$_SERVER['PHP_SELF'].'?action=delmouv&mvt_num='.$line->piece_num.$param.'&page='.$page.($sortfield ? '&sortfield='.$sortfield : '').($sortorder ? '&sortorder='.$sortorder : '').'">'.img_delete().'</a>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|||||||
@ -866,12 +866,14 @@ while ($i < min($num, $limit)) {
|
|||||||
|
|
||||||
// Action column
|
// Action column
|
||||||
print '<td class="nowraponall center">';
|
print '<td class="nowraponall center">';
|
||||||
if (empty($line->date_export)) {
|
if (empty($line->date_export) && empty($line->date_validation)) {
|
||||||
if ($user->rights->accounting->mouvements->creer) {
|
if ($user->rights->accounting->mouvements->creer) {
|
||||||
print '<a class="editfielda" href="'.DOL_URL_ROOT.'/accountancy/bookkeeping/card.php?piece_num='.$line->piece_num.$param.'&page='.$page.($sortfield ? '&sortfield='.$sortfield : '').($sortorder ? '&sortorder='.$sortorder : '').'">'.img_edit().'</a>';
|
print '<a class="editfielda paddingleft marginrightonly" href="' . DOL_URL_ROOT . '/accountancy/bookkeeping/card.php?piece_num=' . $line->piece_num . $param . '&page=' . $page . ($sortfield ? '&sortfield=' . $sortfield : '') . ($sortorder ? '&sortorder=' . $sortorder : '') . '">' . img_edit() . '</a>';
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (empty($line->date_validation)) {
|
||||||
if ($user->rights->accounting->mouvements->supprimer) {
|
if ($user->rights->accounting->mouvements->supprimer) {
|
||||||
print ' <a class="paddingleft" href="'.$_SERVER['PHP_SELF'].'?action=delmouv&mvt_num='.$line->piece_num.$param.'&page='.$page.($sortfield ? '&sortfield='.$sortfield : '').($sortorder ? '&sortorder='.$sortorder : '').'">'.img_delete().'</a>';
|
print '<a class="reposition paddingleft marginrightonly" href="'.$_SERVER['PHP_SELF'].'?action=delmouv&mvt_num='.$line->piece_num.$param.'&page='.$page.($sortfield ? '&sortfield='.$sortfield : '').($sortorder ? '&sortorder='.$sortorder : '').'">'.img_delete().'</a>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|||||||
@ -1506,6 +1506,7 @@ class BookKeeping extends CommonObject
|
|||||||
$sql = "DELETE";
|
$sql = "DELETE";
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX.$this->table_element;
|
$sql .= " FROM ".MAIN_DB_PREFIX.$this->table_element;
|
||||||
$sql .= " WHERE piece_num = ".(int) $piecenum;
|
$sql .= " WHERE piece_num = ".(int) $piecenum;
|
||||||
|
$sql .= " AND date_validated IS NULL"; // For security, exclusion of validated entries at the time of deletion
|
||||||
$sql .= " AND entity IN (".getEntity('accountancy').")";
|
$sql .= " AND entity IN (".getEntity('accountancy').")";
|
||||||
|
|
||||||
$resql = $this->db->query($sql);
|
$resql = $this->db->query($sql);
|
||||||
|
|||||||
@ -175,7 +175,7 @@ if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massa
|
|||||||
$massaction = '';
|
$massaction = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
$parameters = array('socid'=>$socid);
|
$parameters = array('socid'=>isset($socid) ? $socid : null);
|
||||||
$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
|
$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
|
||||||
if ($reshook < 0) {
|
if ($reshook < 0) {
|
||||||
setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
||||||
|
|||||||
@ -115,7 +115,7 @@ if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massa
|
|||||||
$massaction = '';
|
$massaction = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
$parameters = array('socid'=>$socid);
|
$parameters = array('socid'=>isset($socid) ? $socid : null);
|
||||||
$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
|
$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
|
||||||
if ($reshook < 0) {
|
if ($reshook < 0) {
|
||||||
setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
||||||
@ -496,7 +496,7 @@ while ($i < min($num, $limit)) {
|
|||||||
$adherent->gender = $obj->gender;
|
$adherent->gender = $obj->gender;
|
||||||
$adherent->morphy = $obj->morphy;
|
$adherent->morphy = $obj->morphy;
|
||||||
$adherent->email = $obj->email;
|
$adherent->email = $obj->email;
|
||||||
$adherent->typeid = $obj->type;
|
$adherent->typeid = $obj->fk_type;
|
||||||
$adherent->datefin = $db->jdate($obj->datef);
|
$adherent->datefin = $db->jdate($obj->datef);
|
||||||
|
|
||||||
$typeid = ($obj->fk_type > 0 ? $obj->fk_type : $adherent->typeid);
|
$typeid = ($obj->fk_type > 0 ? $obj->fk_type : $adherent->typeid);
|
||||||
|
|||||||
@ -43,6 +43,8 @@ $action = GETPOST('action', 'aZ09');
|
|||||||
$cancel = GETPOST('cancel', 'alpha');
|
$cancel = GETPOST('cancel', 'alpha');
|
||||||
$backtopage = GETPOST('backtopage', 'alpha');
|
$backtopage = GETPOST('backtopage', 'alpha');
|
||||||
|
|
||||||
|
$sall = GETPOST("sall", "alpha");
|
||||||
|
$filter = GETPOST("filter", 'alpha');
|
||||||
$search_lastname = GETPOST('search_lastname', 'alpha');
|
$search_lastname = GETPOST('search_lastname', 'alpha');
|
||||||
$search_login = GETPOST('search_login', 'alpha');
|
$search_login = GETPOST('search_login', 'alpha');
|
||||||
$search_email = GETPOST('search_email', 'alpha');
|
$search_email = GETPOST('search_email', 'alpha');
|
||||||
|
|||||||
@ -157,7 +157,7 @@ $form = new Form($db);
|
|||||||
$formadmin = new FormAdmin($db);
|
$formadmin = new FormAdmin($db);
|
||||||
|
|
||||||
$head = member_type_prepare_head($object);
|
$head = member_type_prepare_head($object);
|
||||||
$titre = $langs->trans("MemberType".$object->type);
|
$titre = $langs->trans("MemberType".$object->id);
|
||||||
|
|
||||||
// Calculate $cnt_trans
|
// Calculate $cnt_trans
|
||||||
$cnt_trans = 0;
|
$cnt_trans = 0;
|
||||||
|
|||||||
@ -297,7 +297,7 @@ $sql .= $object->getFieldList('t');
|
|||||||
// Add fields from extrafields
|
// Add fields from extrafields
|
||||||
if (!empty($extrafields->attributes[$object->table_element]['label'])) {
|
if (!empty($extrafields->attributes[$object->table_element]['label'])) {
|
||||||
foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) {
|
foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) {
|
||||||
$sql .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key.' as options_'.$key.', ' : '');
|
$sql .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key.' as options_'.$key.' ' : '');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Add fields from hooks
|
// Add fields from hooks
|
||||||
|
|||||||
@ -1473,7 +1473,7 @@ if (!$error && ($action == 'affecttag' && $confirm == 'yes') && $permissiontoadd
|
|||||||
$parameters['toselect'] = $toselect;
|
$parameters['toselect'] = $toselect;
|
||||||
$parameters['uploaddir'] = $uploaddir;
|
$parameters['uploaddir'] = $uploaddir;
|
||||||
$parameters['massaction'] = $massaction;
|
$parameters['massaction'] = $massaction;
|
||||||
$parameters['diroutputmassaction'] = $diroutputmassaction;
|
$parameters['diroutputmassaction'] = isset($diroutputmassaction) ? $diroutputmassaction : null;
|
||||||
|
|
||||||
$reshook = $hookmanager->executeHooks('doMassActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
|
$reshook = $hookmanager->executeHooks('doMassActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
|
||||||
if ($reshook < 0) {
|
if ($reshook < 0) {
|
||||||
|
|||||||
@ -1182,7 +1182,7 @@ class FormFile
|
|||||||
);
|
);
|
||||||
$reshook = $hookmanager->executeHooks('showFilesList', $parameters, $object);
|
$reshook = $hookmanager->executeHooks('showFilesList', $parameters, $object);
|
||||||
|
|
||||||
if (isset($reshook) && $reshook != '') { // null or '' for bypass
|
if (!empty($reshook)) { // null or '' for bypass
|
||||||
return $reshook;
|
return $reshook;
|
||||||
} else {
|
} else {
|
||||||
if (!is_object($form)) {
|
if (!is_object($form)) {
|
||||||
|
|||||||
@ -1732,11 +1732,11 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM
|
|||||||
|
|
||||||
$titleboth = $langs->trans("LeadsOrProjects");
|
$titleboth = $langs->trans("LeadsOrProjects");
|
||||||
$titlenew = $langs->trans("NewLeadOrProject"); // Leads and opportunities by default
|
$titlenew = $langs->trans("NewLeadOrProject"); // Leads and opportunities by default
|
||||||
if ($conf->global->PROJECT_USE_OPPORTUNITIES == 0) {
|
if (isset($conf->global->PROJECT_USE_OPPORTUNITIES) && $conf->global->PROJECT_USE_OPPORTUNITIES == 0) {
|
||||||
$titleboth = $langs->trans("Projects");
|
$titleboth = $langs->trans("Projects");
|
||||||
$titlenew = $langs->trans("NewProject");
|
$titlenew = $langs->trans("NewProject");
|
||||||
}
|
}
|
||||||
if ($conf->global->PROJECT_USE_OPPORTUNITIES == 2) { // 2 = leads only
|
if (isset($conf->global->PROJECT_USE_OPPORTUNITIES) && $conf->global->PROJECT_USE_OPPORTUNITIES == 2) { // 2 = leads only
|
||||||
$titleboth = $langs->trans("Leads");
|
$titleboth = $langs->trans("Leads");
|
||||||
$titlenew = $langs->trans("NewLead");
|
$titlenew = $langs->trans("NewLead");
|
||||||
}
|
}
|
||||||
@ -1745,13 +1745,13 @@ function print_left_eldy_menu($db, $menu_array_before, $menu_array_after, &$tabM
|
|||||||
$newmenu->add("/projet/index.php?leftmenu=projects".($search_project_user ? '&search_project_user='.$search_project_user : ''), $titleboth, 0, $user->rights->projet->lire, '', $mainmenu, 'projects', 0, '', '', '', img_picto('', 'project', 'class="pictofixedwidth"'));
|
$newmenu->add("/projet/index.php?leftmenu=projects".($search_project_user ? '&search_project_user='.$search_project_user : ''), $titleboth, 0, $user->rights->projet->lire, '', $mainmenu, 'projects', 0, '', '', '', img_picto('', 'project', 'class="pictofixedwidth"'));
|
||||||
$newmenu->add("/projet/card.php?leftmenu=projects&action=create".($search_project_user ? '&search_project_user='.$search_project_user : ''), $titlenew, 1, $user->rights->projet->creer);
|
$newmenu->add("/projet/card.php?leftmenu=projects&action=create".($search_project_user ? '&search_project_user='.$search_project_user : ''), $titlenew, 1, $user->rights->projet->creer);
|
||||||
|
|
||||||
if ($conf->global->PROJECT_USE_OPPORTUNITIES == 0) {
|
if (isset($conf->global->PROJECT_USE_OPPORTUNITIES) && $conf->global->PROJECT_USE_OPPORTUNITIES == 0) {
|
||||||
$newmenu->add("/projet/list.php?leftmenu=projets".($search_project_user ? '&search_project_user='.$search_project_user : '').'&search_status=99', $langs->trans("List"), 1, $showmode, '', 'project', 'list');
|
$newmenu->add("/projet/list.php?leftmenu=projets".($search_project_user ? '&search_project_user='.$search_project_user : '').'&search_status=99', $langs->trans("List"), 1, $showmode, '', 'project', 'list');
|
||||||
} elseif ($conf->global->PROJECT_USE_OPPORTUNITIES == 1) {
|
} elseif (isset($conf->global->PROJECT_USE_OPPORTUNITIES) && $conf->global->PROJECT_USE_OPPORTUNITIES == 1) {
|
||||||
$newmenu->add("/projet/list.php?leftmenu=projets".($search_project_user ? '&search_project_user='.$search_project_user : ''), $langs->trans("List"), 1, $showmode, '', 'project', 'list');
|
$newmenu->add("/projet/list.php?leftmenu=projets".($search_project_user ? '&search_project_user='.$search_project_user : ''), $langs->trans("List"), 1, $showmode, '', 'project', 'list');
|
||||||
$newmenu->add('/projet/list.php?mainmenu=project&leftmenu=list&search_usage_opportunity=1&search_status=99&search_opp_status=openedopp&contextpage=lead', $langs->trans("ListOpenLeads"), 2, $showmode);
|
$newmenu->add('/projet/list.php?mainmenu=project&leftmenu=list&search_usage_opportunity=1&search_status=99&search_opp_status=openedopp&contextpage=lead', $langs->trans("ListOpenLeads"), 2, $showmode);
|
||||||
$newmenu->add('/projet/list.php?mainmenu=project&leftmenu=list&search_opp_status=notopenedopp&search_status=99&contextpage=project', $langs->trans("ListOpenProjects"), 2, $showmode);
|
$newmenu->add('/projet/list.php?mainmenu=project&leftmenu=list&search_opp_status=notopenedopp&search_status=99&contextpage=project', $langs->trans("ListOpenProjects"), 2, $showmode);
|
||||||
} elseif ($conf->global->PROJECT_USE_OPPORTUNITIES == 2) { // 2 = leads only
|
} elseif (isset($conf->global->PROJECT_USE_OPPORTUNITIES) && $conf->global->PROJECT_USE_OPPORTUNITIES == 2) { // 2 = leads only
|
||||||
$newmenu->add('/projet/list.php?mainmenu=project&leftmenu=list&search_usage_opportunity=1&search_status=99', $langs->trans("List"), 2, $showmode);
|
$newmenu->add('/projet/list.php?mainmenu=project&leftmenu=list&search_usage_opportunity=1&search_status=99', $langs->trans("List"), 2, $showmode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
* Copyright (C) 2004-2008 Laurent Destailleur <eldy@users.sourceforge.net>
|
* Copyright (C) 2004-2008 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
* Copyright (C) 2005-2009 Regis Houssin <regis.houssin@inodbox.com>
|
* Copyright (C) 2005-2009 Regis Houssin <regis.houssin@inodbox.com>
|
||||||
* Copyright (C) 2012 Juanjo Menent <jmenent@2byte.es>
|
* Copyright (C) 2012 Juanjo Menent <jmenent@2byte.es>
|
||||||
|
* Copyright (C) 2021 Ferran Marcet <fmarcet@2byte.es>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -148,19 +149,19 @@ class modStock extends DolibarrModules
|
|||||||
$this->rights[4][4] = 'mouvement';
|
$this->rights[4][4] = 'mouvement';
|
||||||
$this->rights[4][5] = 'creer';
|
$this->rights[4][5] = 'creer';
|
||||||
|
|
||||||
|
$this->rights[5][0] = 1011;
|
||||||
|
$this->rights[5][1] = 'inventoryReadPermission'; // Permission label
|
||||||
|
$this->rights[5][3] = 0; // Permission by default for new user (0/1)
|
||||||
|
$this->rights[5][4] = 'inventory_advance'; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2)
|
||||||
|
$this->rights[5][5] = 'read'; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2)
|
||||||
|
|
||||||
|
$this->rights[6][0] = 1012;
|
||||||
|
$this->rights[6][1] = 'inventoryCreatePermission'; // Permission label
|
||||||
|
$this->rights[6][3] = 0; // Permission by default for new user (0/1)
|
||||||
|
$this->rights[6][4] = 'inventory_advance'; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2)
|
||||||
|
$this->rights[6][5] = 'write'; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2)
|
||||||
|
|
||||||
if ($conf->global->MAIN_FEATURES_LEVEL >= 2) {
|
if ($conf->global->MAIN_FEATURES_LEVEL >= 2) {
|
||||||
$this->rights[5][0] = 1011;
|
|
||||||
$this->rights[5][1] = 'inventoryReadPermission'; // Permission label
|
|
||||||
$this->rights[5][3] = 0; // Permission by default for new user (0/1)
|
|
||||||
$this->rights[5][4] = 'inventory_advance'; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2)
|
|
||||||
$this->rights[5][5] = 'read'; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2)
|
|
||||||
|
|
||||||
$this->rights[6][0] = 1012;
|
|
||||||
$this->rights[6][1] = 'inventoryCreatePermission'; // Permission label
|
|
||||||
$this->rights[6][3] = 0; // Permission by default for new user (0/1)
|
|
||||||
$this->rights[6][4] = 'inventory_advance'; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2)
|
|
||||||
$this->rights[6][5] = 'write'; // In php code, permission will be checked by test if ($user->rights->permkey->level1->level2)
|
|
||||||
|
|
||||||
$this->rights[8][0] = 1014;
|
$this->rights[8][0] = 1014;
|
||||||
$this->rights[8][1] = 'inventoryValidatePermission'; // Permission label
|
$this->rights[8][1] = 'inventoryValidatePermission'; // Permission label
|
||||||
$this->rights[8][3] = 0; // Permission by default for new user (0/1)
|
$this->rights[8][3] = 0; // Permission by default for new user (0/1)
|
||||||
|
|||||||
@ -43,7 +43,7 @@ $reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object,
|
|||||||
print $hookmanager->resPrint;
|
print $hookmanager->resPrint;
|
||||||
if (empty($reshook)) {
|
if (empty($reshook)) {
|
||||||
$params = array();
|
$params = array();
|
||||||
$params['cols'] = $parameters['colspanvalue'];
|
$params['cols'] = isset($parameters['colspanvalue']) ? $parameters['colspanvalue'] : null;
|
||||||
print $object->showOptionals($extrafields, 'edit', $params);
|
print $object->showOptionals($extrafields, 'edit', $params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -197,7 +197,7 @@ if ($massaction == 'presend') {
|
|||||||
// Allow Pre-Mass-Action hook (eg for confirmation dialog)
|
// Allow Pre-Mass-Action hook (eg for confirmation dialog)
|
||||||
$parameters = array(
|
$parameters = array(
|
||||||
'toselect' => $toselect,
|
'toselect' => $toselect,
|
||||||
'uploaddir' => $uploaddir
|
'uploaddir' => isset($uploaddir) ? $uploaddir : null
|
||||||
);
|
);
|
||||||
|
|
||||||
$reshook = $hookmanager->executeHooks('doPreMassActions', $parameters, $object, $action);
|
$reshook = $hookmanager->executeHooks('doPreMassActions', $parameters, $object, $action);
|
||||||
|
|||||||
@ -169,7 +169,7 @@ class PaymentExpenseReport extends CommonObject
|
|||||||
$sql .= " VALUES ($this->fk_expensereport, '".$this->db->idate($now)."',";
|
$sql .= " VALUES ($this->fk_expensereport, '".$this->db->idate($now)."',";
|
||||||
$sql .= " '".$this->db->idate($this->datepaid)."',";
|
$sql .= " '".$this->db->idate($this->datepaid)."',";
|
||||||
$sql .= " ".price2num($totalamount).",";
|
$sql .= " ".price2num($totalamount).",";
|
||||||
$sql .= " ".$this->fk_typepayment.", '".$this->db->escape($this->num_payment)."', '".$this->db->escape($this->note_public)."', ".$user->id.",";
|
$sql .= " ".((int) $this->fk_typepayment).", '".$this->db->escape($this->num_payment)."', '".$this->db->escape($this->note_public)."', ".((int) $user->id).",";
|
||||||
$sql .= " 0)";
|
$sql .= " 0)";
|
||||||
|
|
||||||
dol_syslog(get_class($this)."::create", LOG_DEBUG);
|
dol_syslog(get_class($this)."::create", LOG_DEBUG);
|
||||||
|
|||||||
@ -48,6 +48,7 @@ create table llx_adherent
|
|||||||
state_id integer,
|
state_id integer,
|
||||||
country integer,
|
country integer,
|
||||||
email varchar(255),
|
email varchar(255),
|
||||||
|
url varchar(255) NULL,
|
||||||
|
|
||||||
socialnetworks text DEFAULT NULL, -- json with socialnetworks
|
socialnetworks text DEFAULT NULL, -- json with socialnetworks
|
||||||
skype varchar(255), -- deprecated
|
skype varchar(255), -- deprecated
|
||||||
|
|||||||
@ -1108,34 +1108,41 @@ print dol_get_fiche_end();
|
|||||||
/*
|
/*
|
||||||
* Action bar
|
* Action bar
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
if (!$action || $action == 'delete' || $action == 'showlog_customer_price' || $action == 'showlog_default_price' || $action == 'add_customer_price'
|
if (!$action || $action == 'delete' || $action == 'showlog_customer_price' || $action == 'showlog_default_price' || $action == 'add_customer_price'
|
||||||
|| $action == 'activate_price_by_qty' || $action == 'disable_price_by_qty') {
|
|| $action == 'activate_price_by_qty' || $action == 'disable_price_by_qty') {
|
||||||
print "\n".'<div class="tabsAction">'."\n";
|
print "\n".'<div class="tabsAction">'."\n";
|
||||||
|
|
||||||
if ($object->isVariant()) {
|
|
||||||
if ($user->rights->produit->creer || $user->rights->service->creer) {
|
|
||||||
print '<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans("NoEditVariants")).'">'.$langs->trans("UpdateDefaultPrice").'</a></div>';
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (empty($conf->global->PRODUIT_MULTIPRICES) && empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES)) {
|
|
||||||
if ($user->rights->produit->creer || $user->rights->service->creer) {
|
|
||||||
print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER['PHP_SELF'].'?action=edit_price&id='.$object->id.'">'.$langs->trans("UpdateDefaultPrice").'</a></div>';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
|
$parameters = array();
|
||||||
|
$reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been
|
||||||
|
if (empty($reshook)) {
|
||||||
|
if ($object->isVariant()) {
|
||||||
if ($user->rights->produit->creer || $user->rights->service->creer) {
|
if ($user->rights->produit->creer || $user->rights->service->creer) {
|
||||||
print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=add_customer_price&id='.$object->id.'">'.$langs->trans("AddCustomerPrice").'</a></div>';
|
print '<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="' . dol_escape_htmltag($langs->trans("NoEditVariants")) . '">' . $langs->trans("UpdateDefaultPrice") . '</a></div>';
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
|
if (empty($conf->global->PRODUIT_MULTIPRICES) && empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES)) {
|
||||||
if (!empty($conf->global->PRODUIT_MULTIPRICES) || !empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES)) {
|
if ($user->rights->produit->creer || $user->rights->service->creer) {
|
||||||
if ($user->rights->produit->creer || $user->rights->service->creer) {
|
print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?action=edit_price&id=' . $object->id . '">' . $langs->trans("UpdateDefaultPrice") . '</a></div>';
|
||||||
print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER['PHP_SELF'].'?action=edit_vat&id='.$object->id.'">'.$langs->trans("UpdateVAT").'</a></div>';
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($user->rights->produit->creer || $user->rights->service->creer) {
|
if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
|
||||||
print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER['PHP_SELF'].'?action=edit_price&id='.$object->id.'">'.$langs->trans("UpdateLevelPrices").'</a></div>';
|
if ($user->rights->produit->creer || $user->rights->service->creer) {
|
||||||
|
print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?action=add_customer_price&id=' . $object->id . '">' . $langs->trans("AddCustomerPrice") . '</a></div>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($conf->global->PRODUIT_MULTIPRICES) || !empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES)) {
|
||||||
|
if ($user->rights->produit->creer || $user->rights->service->creer) {
|
||||||
|
print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?action=edit_vat&id=' . $object->id . '">' . $langs->trans("UpdateVAT") . '</a></div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($user->rights->produit->creer || $user->rights->service->creer) {
|
||||||
|
print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?action=edit_price&id=' . $object->id . '">' . $langs->trans("UpdateLevelPrices") . '</a></div>';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -402,7 +402,7 @@ class Productlot extends CommonObject
|
|||||||
$sql .= ' sellby = '.(!isset($this->sellby) || dol_strlen($this->sellby) != 0 ? "'".$this->db->idate($this->sellby)."'" : 'null').',';
|
$sql .= ' sellby = '.(!isset($this->sellby) || dol_strlen($this->sellby) != 0 ? "'".$this->db->idate($this->sellby)."'" : 'null').',';
|
||||||
$sql .= ' eol_date = '.(!isset($this->eol_date) || dol_strlen($this->eol_date) != 0 ? "'".$this->db->idate($this->eol_date)."'" : 'null').',';
|
$sql .= ' eol_date = '.(!isset($this->eol_date) || dol_strlen($this->eol_date) != 0 ? "'".$this->db->idate($this->eol_date)."'" : 'null').',';
|
||||||
$sql .= ' manufacturing_date = '.(!isset($this->manufacturing_date) || dol_strlen($this->manufacturing_date) != 0 ? "'".$this->db->idate($this->manufacturing_date)."'" : 'null').',';
|
$sql .= ' manufacturing_date = '.(!isset($this->manufacturing_date) || dol_strlen($this->manufacturing_date) != 0 ? "'".$this->db->idate($this->manufacturing_date)."'" : 'null').',';
|
||||||
$sql .= ' scrapping_date = '.(!isset($this->destruction_date) || dol_strlen($this->destruction_date) != 0 ? "'".$this->db->idate($this->destruction_date)."'" : 'null').',';
|
$sql .= ' scrapping_date = '.(!isset($this->scrapping_date) || dol_strlen($this->scrapping_date) != 0 ? "'".$this->db->idate($this->scrapping_date)."'" : 'null').',';
|
||||||
//$sql .= ' commissionning_date = '.(!isset($this->first_use_date) || dol_strlen($this->first_use_date) != 0 ? "'".$this->db->idate($this->first_use_date)."'" : 'null').',';
|
//$sql .= ' commissionning_date = '.(!isset($this->first_use_date) || dol_strlen($this->first_use_date) != 0 ? "'".$this->db->idate($this->first_use_date)."'" : 'null').',';
|
||||||
//$sql .= ' qc_frequency = '.(!isset($this->qc_frequency) || dol_strlen($this->qc_frequency) != 0 ? "'".$this->db->escape($this->qc_frequency)."'" : 'null').',';
|
//$sql .= ' qc_frequency = '.(!isset($this->qc_frequency) || dol_strlen($this->qc_frequency) != 0 ? "'".$this->db->escape($this->qc_frequency)."'" : 'null').',';
|
||||||
$sql .= ' datec = '.(!isset($this->datec) || dol_strlen($this->datec) != 0 ? "'".$this->db->idate($this->datec)."'" : 'null').',';
|
$sql .= ' datec = '.(!isset($this->datec) || dol_strlen($this->datec) != 0 ? "'".$this->db->idate($this->datec)."'" : 'null').',';
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/* Copyright (C) 2007-2016 Laurent Destailleur <eldy@users.sourceforge.net>
|
/* Copyright (C) 2007-2016 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
* Copyright (C) 2018 Ferran Marcet <fmarcet@2byte.es>
|
* Copyright (C) 2018-2021 Ferran Marcet <fmarcet@2byte.es>
|
||||||
* Copyright (C) 2019 Frédéric France <frederic.france@netlogic.fr>
|
* Copyright (C) 2019 Frédéric France <frederic.france@netlogic.fr>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
@ -299,7 +299,7 @@ if (is_numeric($nbtotalofrecords) && ($limit > $nbtotalofrecords || empty($limit
|
|||||||
if ($num == 1 && !empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $search_all && !$page) {
|
if ($num == 1 && !empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $search_all && !$page) {
|
||||||
$obj = $db->fetch_object($resql);
|
$obj = $db->fetch_object($resql);
|
||||||
$id = $obj->rowid;
|
$id = $obj->rowid;
|
||||||
header("Location: ".dol_buildpath('/mymodule/myobject_card.php', 1).'?id='.$id);
|
header("Location: ".DOL_URL_ROOT.'/product/stock/productlot_card.php?id='.$id);
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -89,6 +89,8 @@ $socid = GETPOST('socid', 'int');
|
|||||||
//if ($user->socid > 0) $socid = $user->socid; // For external user, no check is done on company because readability is managed by public status of project and assignement.
|
//if ($user->socid > 0) $socid = $user->socid; // For external user, no check is done on company because readability is managed by public status of project and assignement.
|
||||||
restrictedArea($user, 'projet', $object->id, 'projet&project');
|
restrictedArea($user, 'projet', $object->id, 'projet&project');
|
||||||
|
|
||||||
|
$permissiondellink = $user->rights->projet->creer; // Used by the include of actions_dellink.inc.php
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Actions
|
* Actions
|
||||||
@ -121,6 +123,8 @@ if (empty($reshook)) {
|
|||||||
$action = '';
|
$action = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
include DOL_DOCUMENT_ROOT.'/core/actions_dellink.inc.php'; // Must be include, not include_once
|
||||||
|
|
||||||
if ($action == 'add' && $user->rights->projet->creer) {
|
if ($action == 'add' && $user->rights->projet->creer) {
|
||||||
$error = 0;
|
$error = 0;
|
||||||
if (!GETPOST('ref')) {
|
if (!GETPOST('ref')) {
|
||||||
@ -132,9 +136,11 @@ if (empty($reshook)) {
|
|||||||
$error++;
|
$error++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GETPOST('opp_amount') != '' && !(GETPOST('opp_status') > 0)) {
|
if (!empty($conf->global->PROJECT_USE_OPPORTUNITIES)) {
|
||||||
$error++;
|
if (GETPOST('opp_amount') != '' && !(GETPOST('opp_status') > 0)) {
|
||||||
setEventMessages($langs->trans("ErrorOppStatusRequiredIfAmount"), null, 'errors');
|
$error++;
|
||||||
|
setEventMessages($langs->trans("ErrorOppStatusRequiredIfAmount"), null, 'errors');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create with status validated immediatly
|
// Create with status validated immediatly
|
||||||
@ -270,9 +276,11 @@ if (empty($reshook)) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($object->opp_amount && ($object->opp_status <= 0)) {
|
if (!empty($conf->global->PROJECT_USE_OPPORTUNITIES)) {
|
||||||
$error++;
|
if ($object->opp_amount && ($object->opp_status <= 0)) {
|
||||||
setEventMessages($langs->trans("ErrorOppStatusRequiredIfAmount"), null, 'errors');
|
$error++;
|
||||||
|
setEventMessages($langs->trans("ErrorOppStatusRequiredIfAmount"), null, 'errors');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$error) {
|
if (!$error) {
|
||||||
|
|||||||
@ -250,6 +250,8 @@ if (!empty($conf->categorie->enabled) && !empty($conf->global->CATEGORY_GRAPHSTA
|
|||||||
$thirdpartycateggraph .= '</td></tr>';
|
$thirdpartycateggraph .= '</td></tr>';
|
||||||
$thirdpartycateggraph .= '</table>';
|
$thirdpartycateggraph .= '</table>';
|
||||||
$thirdpartycateggraph .= '</div>';
|
$thirdpartycateggraph .= '</div>';
|
||||||
|
} else {
|
||||||
|
$thirdpartycateggraph = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -94,7 +94,7 @@ $search_categ_cus = trim(GETPOST("search_categ_cus", 'int'));
|
|||||||
$search_categ_sup = trim(GETPOST("search_categ_sup", 'int'));
|
$search_categ_sup = trim(GETPOST("search_categ_sup", 'int'));
|
||||||
$search_country = GETPOST("search_country", 'intcomma');
|
$search_country = GETPOST("search_country", 'intcomma');
|
||||||
$search_type_thirdparty = GETPOST("search_type_thirdparty", 'int');
|
$search_type_thirdparty = GETPOST("search_type_thirdparty", 'int');
|
||||||
$search_price_level = GETPOST('search_prive_level', 'int');
|
$search_price_level = GETPOST('search_price_level', 'int');
|
||||||
$search_staff = GETPOST("search_staff", 'int');
|
$search_staff = GETPOST("search_staff", 'int');
|
||||||
$search_status = GETPOST("search_status", 'int');
|
$search_status = GETPOST("search_status", 'int');
|
||||||
$search_type = GETPOST('search_type', 'alpha');
|
$search_type = GETPOST('search_type', 'alpha');
|
||||||
@ -356,7 +356,7 @@ if (empty($reshook)) {
|
|||||||
$search_idprof6 = '';
|
$search_idprof6 = '';
|
||||||
$search_vat = '';
|
$search_vat = '';
|
||||||
$search_type = '';
|
$search_type = '';
|
||||||
$search_prive_level = '';
|
$search_price_level = '';
|
||||||
$search_type_thirdparty = '';
|
$search_type_thirdparty = '';
|
||||||
$search_staff = '';
|
$search_staff = '';
|
||||||
$search_status = -1;
|
$search_status = -1;
|
||||||
@ -639,8 +639,8 @@ if ($search_status != '' && $search_status >= 0) {
|
|||||||
if (!empty($conf->barcode->enabled) && $search_barcode) {
|
if (!empty($conf->barcode->enabled) && $search_barcode) {
|
||||||
$sql .= natural_search("s.barcode", $search_barcode);
|
$sql .= natural_search("s.barcode", $search_barcode);
|
||||||
}
|
}
|
||||||
if ($search_prive_level && $search_prive_level != '-1') {
|
if ($search_price_level && $search_price_level != '-1') {
|
||||||
$sql .= natural_search("s.price_level", $search_prive_level, 2);
|
$sql .= natural_search("s.price_level", $search_price_level, 2);
|
||||||
}
|
}
|
||||||
if ($search_type_thirdparty && $search_type_thirdparty > 0) {
|
if ($search_type_thirdparty && $search_type_thirdparty > 0) {
|
||||||
$sql .= natural_search("s.fk_typent", $search_type_thirdparty, 2);
|
$sql .= natural_search("s.fk_typent", $search_type_thirdparty, 2);
|
||||||
@ -813,8 +813,8 @@ if ($search_idprof6 != '') {
|
|||||||
if ($search_vat != '') {
|
if ($search_vat != '') {
|
||||||
$param .= '&search_vat='.urlencode($search_vat);
|
$param .= '&search_vat='.urlencode($search_vat);
|
||||||
}
|
}
|
||||||
if ($search_prive_level != '') {
|
if ($search_price_level != '') {
|
||||||
$param .= '&search_prive_level='.urlencode($search_prive_level);
|
$param .= '&search_price_level='.urlencode($search_price_level);
|
||||||
}
|
}
|
||||||
if ($search_type_thirdparty != '' && $search_type_thirdparty > 0) {
|
if ($search_type_thirdparty != '' && $search_type_thirdparty > 0) {
|
||||||
$param .= '&search_type_thirdparty='.urlencode($search_type_thirdparty);
|
$param .= '&search_type_thirdparty='.urlencode($search_type_thirdparty);
|
||||||
@ -1094,7 +1094,7 @@ if (!empty($arrayfields['typent.code']['checked'])) {
|
|||||||
// Multiprice level
|
// Multiprice level
|
||||||
if (!empty($arrayfields['s.price_level']['checked'])) {
|
if (!empty($arrayfields['s.price_level']['checked'])) {
|
||||||
print '<td class="liste_titre">';
|
print '<td class="liste_titre">';
|
||||||
print '<input class="flat searchstring maxwidth50imp" type="text" name="search_prive_level" value="'.dol_escape_htmltag($search_prive_level).'">';
|
print '<input class="flat searchstring maxwidth50imp" type="text" name="search_price_level" value="'.dol_escape_htmltag($search_price_level).'">';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
}
|
}
|
||||||
// Staff
|
// Staff
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user