Merge branch 'develop' of https://github.com/Dolibarr/dolibarr into develop_of_consumption_selectbatch
This commit is contained in:
commit
952d77c8e1
35
.github/ISSUE_TEMPLATE/bug_report.md
vendored
35
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@ -1,35 +0,0 @@
|
|||||||
---
|
|
||||||
name: Bug report
|
|
||||||
about: Create a report to help us fix something that is broken
|
|
||||||
title: ''
|
|
||||||
labels: Bug
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Instructions
|
|
||||||
*This is a template to help you report good issues. You may use [Github Markdown](https://help.github.com/articles/getting-started-with-writing-and-formatting-on-github/) syntax to format your issue report.*
|
|
||||||
*Please:*
|
|
||||||
- *replace the bracket enclosed texts with meaningful information*
|
|
||||||
- *remove any unused sub-section*
|
|
||||||
|
|
||||||
|
|
||||||
# Bug
|
|
||||||
[*Short description*]
|
|
||||||
|
|
||||||
## Environment
|
|
||||||
- **Version**: [*Affected Dolibarr version(s)*]
|
|
||||||
- **OS**: [*Server OS type and version*]
|
|
||||||
- **Web server**: [*Webserver type and version*]
|
|
||||||
- **PHP**: [*PHP version*]
|
|
||||||
- **Database**: [*Database type and version*]
|
|
||||||
- **URL(s)**: [*Affected URL(s)*]
|
|
||||||
|
|
||||||
## Expected and actual behavior
|
|
||||||
[*Verbose description*]
|
|
||||||
|
|
||||||
## Steps to reproduce the behavior
|
|
||||||
[*Verbose description*]
|
|
||||||
|
|
||||||
## [Attached files](https://help.github.com/articles/issue-attachments) (Screenshots, screencasts, dolibarr.log, debugging informations…)
|
|
||||||
[*Files*]
|
|
||||||
71
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
71
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
name: Bug report
|
||||||
|
description: Create a report to help us fix something that is broken
|
||||||
|
labels: ["Bug"]
|
||||||
|
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
This is a template to help you report good issues. You may use [Github Markdown](https://help.github.com/articles/getting-started-with-writing-and-formatting-on-github/) syntax to format your issue report.
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: bug
|
||||||
|
attributes:
|
||||||
|
label: Bug
|
||||||
|
description: Please give a short description of the bug
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
id: environment-version
|
||||||
|
attributes:
|
||||||
|
label: Environment Version
|
||||||
|
description: Affected Dolibarr version(s)
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
id: environment-os
|
||||||
|
attributes:
|
||||||
|
label: Environment OS
|
||||||
|
description: Server OS type and version
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
id: environment-webserver
|
||||||
|
attributes:
|
||||||
|
label: Environment Web server
|
||||||
|
description: Webserver type and version
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
id: environment-php
|
||||||
|
attributes:
|
||||||
|
label: Environment PHP
|
||||||
|
description: PHP version
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
id: environment-database
|
||||||
|
attributes:
|
||||||
|
label: Environment Database
|
||||||
|
description: Database type and version
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
id: environment-urls
|
||||||
|
attributes:
|
||||||
|
label: Environment URL(s)
|
||||||
|
description: Affected URL(s)
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: expected-behaviour
|
||||||
|
attributes:
|
||||||
|
label: Expected and actual behavior
|
||||||
|
description: Verbose description
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: reproduce
|
||||||
|
attributes:
|
||||||
|
label: Steps to reproduce the behavior
|
||||||
|
description: Verbose description
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: files
|
||||||
|
attributes:
|
||||||
|
label: Attached files
|
||||||
|
description: Screenshots, screencasts, dolibarr.log, debugging informations
|
||||||
27
.github/ISSUE_TEMPLATE/feature_request.md
vendored
27
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@ -1,27 +0,0 @@
|
|||||||
---
|
|
||||||
name: Feature request
|
|
||||||
about: Suggest a new idea for this project
|
|
||||||
title: ''
|
|
||||||
labels: Feature request
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Instructions
|
|
||||||
*This is a template to help you report good issues. You may use [Github Markdown](https://help.github.com/articles/getting-started-with-writing-and-formatting-on-github/) syntax to format your issue report.*
|
|
||||||
*Please:*
|
|
||||||
- *replace the bracket enclosed texts with meaningful information*
|
|
||||||
- *remove any unused sub-section*
|
|
||||||
|
|
||||||
|
|
||||||
# Feature Request
|
|
||||||
[*Short description*]
|
|
||||||
|
|
||||||
## Use case
|
|
||||||
[*Verbose description*]
|
|
||||||
|
|
||||||
## Suggested implementation
|
|
||||||
[*Verbose description*]
|
|
||||||
|
|
||||||
## Suggested steps
|
|
||||||
[*List of tasks to achieve goal*]
|
|
||||||
35
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
35
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
name: Feature request
|
||||||
|
description: Suggest a new idea for this project
|
||||||
|
labels: ["Feature request"]
|
||||||
|
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
This is a template to help you report good issues. You may use [Github Markdown](https://help.github.com/articles/getting-started-with-writing-and-formatting-on-github/) syntax to format your issue report.
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: feature-request
|
||||||
|
attributes:
|
||||||
|
label: Feature Request
|
||||||
|
description: Short description
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: use-case
|
||||||
|
attributes:
|
||||||
|
label: Use case
|
||||||
|
description: Verbose description
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: suggested-implementation
|
||||||
|
attributes:
|
||||||
|
label: Suggested implementation
|
||||||
|
description: Verbose description
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: suggested-steps
|
||||||
|
attributes:
|
||||||
|
label: Suggested steps
|
||||||
|
description: List of tasks to achieve goal
|
||||||
11
ChangeLog
11
ChangeLog
@ -12,10 +12,9 @@ NEW: Online proposal signature
|
|||||||
NEW: Can define some max limit on expense report (per period, per type or expense, ...)
|
NEW: Can define some max limit on expense report (per period, per type or expense, ...)
|
||||||
NEW: Allow the use of __NEWREF__ to get for example the new reference a draft order will get after validation.
|
NEW: Allow the use of __NEWREF__ to get for example the new reference a draft order will get after validation.
|
||||||
NEW: Add option to disable globaly some notifications emails.
|
NEW: Add option to disable globaly some notifications emails.
|
||||||
NEW: #18326 Workflow: Close order on shipment closing.
|
|
||||||
NEW: #18401 Add __NEWREF__ subtitute to get new object reference.
|
NEW: #18401 Add __NEWREF__ subtitute to get new object reference.
|
||||||
NEW: #18403 Add __URL_SHIPMENT__ substitute to get the URL of a shipment
|
NEW: #18403 Add __URL_SHIPMENT__ substitute to get the URL of a shipment
|
||||||
NEW: #18689 REST API module: add api key generate / modify right.
|
NEW: #18689 REST API module: add api key generate / modify permission.
|
||||||
NEW: #18663 Make "L'Annuaire des Entreprises" the default provider for SIREN verification for French thirdparties.
|
NEW: #18663 Make "L'Annuaire des Entreprises" the default provider for SIREN verification for French thirdparties.
|
||||||
NEW: #18046 Add tags on ticket/categories
|
NEW: #18046 Add tags on ticket/categories
|
||||||
NEW: #18326 Workflow: Close order on shipment closing.
|
NEW: #18326 Workflow: Close order on shipment closing.
|
||||||
@ -109,6 +108,13 @@ NEW: External backups can be downloaded from the "About info page".
|
|||||||
NEW: Add massaction to switch status on sale / on purchase of a product.
|
NEW: Add massaction to switch status on sale / on purchase of a product.
|
||||||
|
|
||||||
|
|
||||||
|
Modules
|
||||||
|
NEW: Stable module Knowledge Management
|
||||||
|
NEW: Experimental module Event Organization Management
|
||||||
|
NEW: Experimental module Workstations Management
|
||||||
|
NEW: Development of module Partnership Management
|
||||||
|
|
||||||
|
|
||||||
For developers:
|
For developers:
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
@ -116,6 +122,7 @@ NEW: Introduce method hasRight
|
|||||||
NEW: Can use textarea field into a confirm popup.
|
NEW: Can use textarea field into a confirm popup.
|
||||||
NEW: Can use the result_mode of mysqli driver. Save memory for list count
|
NEW: Can use the result_mode of mysqli driver. Save memory for list count
|
||||||
NEW: #18319 REST API - Shipment: Add 'close' action / endpoint / POST method.
|
NEW: #18319 REST API - Shipment: Add 'close' action / endpoint / POST method.
|
||||||
|
NEW: Add API /approve and /makeOrder for purchase orders.
|
||||||
NEW: add action trigger for member excluded
|
NEW: add action trigger for member excluded
|
||||||
NEW: add option MAIN_IBAN_IS_NEVER_MANDATORY, MAIN_IBAN_NOT_MANDATORY, PROPAL_NOT_BILLABLE, PROPAL_REOPEN_UNSIGNED_ONLY, PROPOSAL_ARE_NOT_BILLABLE, TICKETS_MESSAGE_FORCE_MAIL
|
NEW: add option MAIN_IBAN_IS_NEVER_MANDATORY, MAIN_IBAN_NOT_MANDATORY, PROPAL_NOT_BILLABLE, PROPAL_REOPEN_UNSIGNED_ONLY, PROPOSAL_ARE_NOT_BILLABLE, TICKETS_MESSAGE_FORCE_MAIL
|
||||||
NEW: Add code codebar column on serial/lot structure
|
NEW: Add code codebar column on serial/lot structure
|
||||||
|
|||||||
@ -67,7 +67,7 @@ Scope is the web application (back office) and the APIs.
|
|||||||
* Remote code execution (RCE)
|
* Remote code execution (RCE)
|
||||||
* Local files access and manipulation (LFI, RFI, XXE, SSRF, XSPA)
|
* Local files access and manipulation (LFI, RFI, XXE, SSRF, XSPA)
|
||||||
* Code injections (HTML, JS, SQL, PHP, ...)
|
* Code injections (HTML, JS, SQL, PHP, ...)
|
||||||
* Cross-Site Scripting (XSS), except from setup page of module "External web site" (allowing any content here, editable by admin user only, is accepted on purpose or into module "Web site" when permission to edit website content is allowed).
|
* Cross-Site Scripting (XSS), except from setup page of module "External web site" (allowing any content here, editable by admin user only, is accepted on purpose) and except into module "Web site" when permission to edit website content is allowed (injecting any data in this case is allowed too).
|
||||||
* Cross-Site Requests Forgery (CSRF) with real security impact (when using GET URLs, CSRF are qualified only for creating, updating or deleting data from pages restricted to admin users)
|
* Cross-Site Requests Forgery (CSRF) with real security impact (when using GET URLs, CSRF are qualified only for creating, updating or deleting data from pages restricted to admin users)
|
||||||
* Open redirect
|
* Open redirect
|
||||||
* Broken authentication & session management
|
* Broken authentication & session management
|
||||||
|
|||||||
@ -39,15 +39,13 @@ RUN chmod +x /usr/local/bin/docker-run.sh
|
|||||||
|
|
||||||
RUN pecl install xdebug && docker-php-ext-enable xdebug
|
RUN pecl install xdebug && docker-php-ext-enable xdebug
|
||||||
RUN echo 'zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20180731/xdebug.so"' >> ${PHP_INI_DIR}/php.ini
|
RUN echo 'zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20180731/xdebug.so"' >> ${PHP_INI_DIR}/php.ini
|
||||||
RUN echo 'xdebug.remote_autostart=1' >> ${PHP_INI_DIR}/php.ini
|
RUN echo 'xdebug.mode=debug' >> ${PHP_INI_DIR}/php.ini
|
||||||
RUN echo 'xdebug.remote_enable=1' >> ${PHP_INI_DIR}/php.ini
|
RUN echo 'xdebug.start_with_request=yes' >> ${PHP_INI_DIR}/php.ini
|
||||||
RUN echo 'xdebug.default_enable=1' >> ${PHP_INI_DIR}/php.ini
|
RUN echo 'xdebug.client_host=host.docker.internal' >> ${PHP_INI_DIR}/php.ini
|
||||||
#RUN echo 'xdebug.remote_host=docker.host' >> ${PHP_INI_DIR}/php.ini
|
RUN echo 'xdebug.client_port=9003' >> ${PHP_INI_DIR}/php.ini
|
||||||
RUN echo 'xdebug.remote_port=9000' >> ${PHP_INI_DIR}/php.ini
|
RUN echo 'xdebug.discover_client_host=true' >> ${PHP_INI_DIR}/php.ini
|
||||||
RUN echo 'xdebug.remote_connect_back=1' >> ${PHP_INI_DIR}/php.ini
|
#RUN echo 'xdebug.log="/tmp/xdebug.log"' >> ${PHP_INI_DIR}/php.ini
|
||||||
RUN echo 'xdebug.profiler_enable=0' >> ${PHP_INI_DIR}/php.ini
|
RUN echo 'xdebug.idekey="netbeans-xdebug"' >> ${PHP_INI_DIR}/php.ini
|
||||||
RUN echo 'xdebug.remote_log="/tmp/xdebug.log"' >> ${PHP_INI_DIR}/php.ini
|
|
||||||
#RUN echo 'localhost docker.host' >> /etc/hosts
|
|
||||||
|
|
||||||
# set up sendmail config, to use maildev
|
# set up sendmail config, to use maildev
|
||||||
RUN echo "account default" > /etc/msmtprc
|
RUN echo "account default" > /etc/msmtprc
|
||||||
|
|||||||
@ -48,6 +48,7 @@ services:
|
|||||||
- external-pod
|
- external-pod
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
- "localhost.localdomain:127.0.0.1"
|
- "localhost.localdomain:127.0.0.1"
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
|
|
||||||
mail:
|
mail:
|
||||||
image: maildev/maildev
|
image: maildev/maildev
|
||||||
|
|||||||
@ -1,62 +1,93 @@
|
|||||||
<VirtualHost *:80>
|
<VirtualHost *:80>
|
||||||
#php_admin_value sendmail_path "/usr/sbin/sendmail -t -i"
|
#php_admin_value sendmail_path "/usr/sbin/sendmail -t -i"
|
||||||
#php_admin_value mail.force_extra_parameters "-f postmaster@mydomain.com"
|
#php_admin_value mail.force_extra_parameters "-f postmaster@mydomain.com"
|
||||||
php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f postmaster@mydomain.com"
|
php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f postmaster@mydomain.com"
|
||||||
php_admin_value open_basedir /tmp/:/home/../htdocs
|
php_admin_value open_basedir /tmp/:/home/.../htdocs:/home/.../dolibarr_documents:
|
||||||
|
|
||||||
|
ServerName myvirtualalias
|
||||||
|
ServerAlias myvirtualalias
|
||||||
|
|
||||||
|
UseCanonicalName On
|
||||||
|
|
||||||
|
KeepAlive On
|
||||||
|
KeepAliveTimeout 5
|
||||||
|
MaxKeepAliveRequests 20
|
||||||
|
|
||||||
|
AddDefaultCharset UTF-8
|
||||||
|
|
||||||
|
DocumentRoot "/home/.../htdocs"
|
||||||
|
|
||||||
|
<Directory /home/.../htdocs/>
|
||||||
|
AllowOverride None
|
||||||
|
Options -Indexes -MultiViews +FollowSymLinks -ExecCGI
|
||||||
|
Require all granted
|
||||||
|
|
||||||
ServerName myvirtualalias
|
# To restrict access by a HTTP basic auth
|
||||||
ServerAlias myvirtualalias
|
#AuthType Basic
|
||||||
|
#AuthName "Authenticate to backoffice"
|
||||||
|
#AuthUserFile /etc/apache2/.htpasswd
|
||||||
|
#require valid-user
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
# Leaving /public and /api, /dav, .well_known but also wrappers for document and viewimage accessible to everyone
|
||||||
|
<Directory /home/admin/wwwroot/dolibarr/htdocs/public/>
|
||||||
|
AuthType None
|
||||||
|
Require all granted
|
||||||
|
Satisfy any
|
||||||
|
</Directory>
|
||||||
|
<Directory /home/admin/wwwroot/dolibarr/htdocs/api/>
|
||||||
|
AuthType None
|
||||||
|
Require all granted
|
||||||
|
Satisfy any
|
||||||
|
</Directory>
|
||||||
|
<Directory /home/admin/wwwroot/dolibarr/htdocs/dav/>
|
||||||
|
AuthType None
|
||||||
|
Require all granted
|
||||||
|
Satisfy any
|
||||||
|
</Directory>
|
||||||
|
<Directory /home/admin/wwwroot/dolibarr/htdocs/.well-known/>
|
||||||
|
AuthType None
|
||||||
|
Require all granted
|
||||||
|
Satisfy any
|
||||||
|
</Directory>
|
||||||
|
<Files ~ "(document\.php|viewimage\.php|\.js\.php|\.json\.php|\.js|\.css\.php|\.css|\.gif|\.png|\.svg|\.woff2|favicon\.ico)$">
|
||||||
|
AuthType None
|
||||||
|
Require all granted
|
||||||
|
Satisfy any
|
||||||
|
</Files>
|
||||||
|
|
||||||
UseCanonicalName On
|
|
||||||
|
ErrorLog /var/log/apache2/myvirtualalias_error_log
|
||||||
AddDefaultCharset UTF-8
|
TransferLog /var/log/apache2/myvirtualalias_access_log
|
||||||
|
|
||||||
DocumentRoot "/home/.../htdocs"
|
# Compress returned resources of type php pages, text file export, css and javascript
|
||||||
|
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript
|
||||||
<Directory /home/.../htdocs/>
|
|
||||||
AllowOverride None
|
AddType text/javascript .jgz
|
||||||
Options -Indexes -MultiViews +FollowSymLinks -ExecCGI
|
AddEncoding gzip .jgz
|
||||||
Require all granted
|
ExpiresActive On
|
||||||
</Directory>
|
ExpiresByType image/x-icon A2592000
|
||||||
|
ExpiresByType image/gif A2592000
|
||||||
<Directory "/home/../htdocs/cache">
|
ExpiresByType image/png A2592000
|
||||||
Deny from all
|
ExpiresByType image/jpeg A2592000
|
||||||
RemoveHandler .phtml .php .php3 .php4 .php5 .php6 .phps .cgi .exe .pl .asp .aspx .shtml .shtm .fcgi .fpl .jsp .htm .html .wml
|
ExpiresByType text/css A2592000
|
||||||
AddType application/x-httpd-php-source .phtml .php .php3 .php4 .php5 .php6 .phps .cgi .exe .pl .asp .aspx .shtml .shtm .fcgi .fpl .jsp .htm .html .wml
|
ExpiresByType text/javascript A2592000
|
||||||
</Directory>
|
ExpiresByType application/x-javascript A2592000
|
||||||
|
ExpiresByType application/javascript A2592000
|
||||||
|
|
||||||
ErrorLog /var/log/apache2/myvirtualalias_error_log
|
SSLEngine On
|
||||||
TransferLog /var/log/apache2/myvirtualalias_access_log
|
|
||||||
|
# A self-signed (snakeoil) certificate can be created by installing
|
||||||
# Compress returned resources of type php pages, text file export, css and javascript
|
# the ssl-cert package. See
|
||||||
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript
|
# /usr/share/doc/apache2.2-common/README.Debian.gz for more info.
|
||||||
|
# If both key and certificate are stored in the same file, only the
|
||||||
AddType text/javascript .jgz
|
# SSLCertificateFile directive is needed.
|
||||||
AddEncoding gzip .jgz
|
SSLCertificateFile /etc/letsencrypt/live/www.mydomain.com/cert.pem
|
||||||
ExpiresActive On
|
SSLCertificateKeyFile /etc/letsencrypt/live/www.mydomain.com/privkey.pem
|
||||||
ExpiresByType image/x-icon A2592000
|
SSLCertificateChainFile /etc/letsencrypt/live/www.mydomain.com/chain.pem
|
||||||
ExpiresByType image/gif A2592000
|
|
||||||
ExpiresByType image/png A2592000
|
#RewriteEngine on
|
||||||
ExpiresByType image/jpeg A2592000
|
#RewriteCond %{SERVER_PORT} ^80$
|
||||||
ExpiresByType text/css A2592000
|
#RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R]
|
||||||
ExpiresByType text/javascript A2592000
|
|
||||||
ExpiresByType application/x-javascript A2592000
|
|
||||||
ExpiresByType application/javascript A2592000
|
|
||||||
|
|
||||||
SSLEngine On
|
|
||||||
|
|
||||||
# A self-signed (snakeoil) certificate can be created by installing
|
|
||||||
# the ssl-cert package. See
|
|
||||||
# /usr/share/doc/apache2.2-common/README.Debian.gz for more info.
|
|
||||||
# If both key and certificate are stored in the same file, only the
|
|
||||||
# SSLCertificateFile directive is needed.
|
|
||||||
SSLCertificateFile /etc/letsencrypt/live/www.mydomain.com/cert.pem
|
|
||||||
SSLCertificateKeyFile /etc/letsencrypt/live/www.mydomain.com/privkey.pem
|
|
||||||
SSLCertificateChainFile /etc/letsencrypt/live/www.mydomain.com/chain.pem
|
|
||||||
|
|
||||||
#RewriteEngine on
|
|
||||||
#RewriteCond %{SERVER_PORT} ^80$
|
|
||||||
#RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R]
|
|
||||||
|
|
||||||
</VirtualHost>
|
</VirtualHost>
|
||||||
|
|||||||
@ -237,7 +237,7 @@ if ($action != 'export_csv') {
|
|||||||
print '<input type="hidden" name="page" value="'.$page.'">';
|
print '<input type="hidden" name="page" value="'.$page.'">';
|
||||||
|
|
||||||
$parameters = array();
|
$parameters = array();
|
||||||
$reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
$reshook = $hookmanager->executeHooks('addMoreActionsButtonsList', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||||
if (empty($reshook)) {
|
if (empty($reshook)) {
|
||||||
$button = '<input type="button" id="exportcsvbutton" name="exportcsvbutton" class="butAction" value="'.$langs->trans("Export").' ('.$conf->global->ACCOUNTING_EXPORT_FORMAT.')" />';
|
$button = '<input type="button" id="exportcsvbutton" name="exportcsvbutton" class="butAction" value="'.$langs->trans("Export").' ('.$conf->global->ACCOUNTING_EXPORT_FORMAT.')" />';
|
||||||
|
|
||||||
|
|||||||
@ -766,7 +766,7 @@ if (count($filter)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$parameters = array();
|
$parameters = array();
|
||||||
$reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
$reshook = $hookmanager->executeHooks('addMoreActionsButtonsList', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||||
if (empty($reshook)) {
|
if (empty($reshook)) {
|
||||||
// Button re-export
|
// Button re-export
|
||||||
if (!empty($conf->global->ACCOUNTING_REEXPORT)) {
|
if (!empty($conf->global->ACCOUNTING_REEXPORT)) {
|
||||||
|
|||||||
@ -473,7 +473,7 @@ print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
|
|||||||
print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
|
print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
|
||||||
|
|
||||||
$parameters = array();
|
$parameters = array();
|
||||||
$reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
$reshook = $hookmanager->executeHooks('addMoreActionsButtonsList', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||||
if (empty($reshook)) {
|
if (empty($reshook)) {
|
||||||
$newcardbutton = dolGetButtonTitle($langs->trans('ViewFlatList'), '', 'fa fa-list paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/list.php?'.$param);
|
$newcardbutton = dolGetButtonTitle($langs->trans('ViewFlatList'), '', 'fa fa-list paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/list.php?'.$param);
|
||||||
$newcardbutton .= dolGetButtonTitle($langs->trans('GroupByAccountAccounting'), '', 'fa fa-stream paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/listbyaccount.php?'.$param, '', 1, array('morecss' => 'marginleftonly btnTitleSelected'));
|
$newcardbutton .= dolGetButtonTitle($langs->trans('GroupByAccountAccounting'), '', 'fa fa-stream paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/listbyaccount.php?'.$param, '', 1, array('morecss' => 'marginleftonly btnTitleSelected'));
|
||||||
|
|||||||
@ -473,7 +473,7 @@ print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
|
|||||||
print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
|
print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
|
||||||
|
|
||||||
$parameters = array();
|
$parameters = array();
|
||||||
$reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
$reshook = $hookmanager->executeHooks('addMoreActionsButtonsList', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||||
if (empty($reshook)) {
|
if (empty($reshook)) {
|
||||||
$newcardbutton = dolGetButtonTitle($langs->trans('ViewFlatList'), '', 'fa fa-list paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/list.php?'.$param);
|
$newcardbutton = dolGetButtonTitle($langs->trans('ViewFlatList'), '', 'fa fa-list paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/list.php?'.$param);
|
||||||
$newcardbutton .= dolGetButtonTitle($langs->trans('GroupByAccountAccounting'), '', 'fa fa-stream paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/listbyaccount.php?'.$param, '', 1, array('morecss' => 'marginleftonly'));
|
$newcardbutton .= dolGetButtonTitle($langs->trans('GroupByAccountAccounting'), '', 'fa fa-stream paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/listbyaccount.php?'.$param, '', 1, array('morecss' => 'marginleftonly'));
|
||||||
|
|||||||
@ -94,9 +94,15 @@ class AdherentType extends CommonObject
|
|||||||
*/
|
*/
|
||||||
public $amount;
|
public $amount;
|
||||||
|
|
||||||
/** @var string Public note */
|
/**
|
||||||
|
* @var string Public note
|
||||||
|
* @deprecated
|
||||||
|
*/
|
||||||
public $note;
|
public $note;
|
||||||
|
|
||||||
|
/** @var string Public note */
|
||||||
|
public $note_public;
|
||||||
|
|
||||||
/** @var integer Can vote */
|
/** @var integer Can vote */
|
||||||
public $vote;
|
public $vote;
|
||||||
|
|
||||||
@ -358,6 +364,10 @@ class AdherentType extends CommonObject
|
|||||||
|
|
||||||
$this->label = trim($this->label);
|
$this->label = trim($this->label);
|
||||||
|
|
||||||
|
if (empty($this->note_public) && !empty($this->note)) { // For backward compatibility
|
||||||
|
$this->note_public = $this->note;
|
||||||
|
}
|
||||||
|
|
||||||
$this->db->begin();
|
$this->db->begin();
|
||||||
|
|
||||||
$sql = "UPDATE ".MAIN_DB_PREFIX."adherent_type ";
|
$sql = "UPDATE ".MAIN_DB_PREFIX."adherent_type ";
|
||||||
@ -368,14 +378,14 @@ class AdherentType extends CommonObject
|
|||||||
$sql .= "subscription = '".$this->db->escape($this->subscription)."',";
|
$sql .= "subscription = '".$this->db->escape($this->subscription)."',";
|
||||||
$sql .= "amount = ".((empty($this->amount) && $this->amount == '') ? 'null' : ((float) $this->amount)).",";
|
$sql .= "amount = ".((empty($this->amount) && $this->amount == '') ? 'null' : ((float) $this->amount)).",";
|
||||||
$sql .= "duration = '".$this->db->escape($this->duration_value.$this->duration_unit)."',";
|
$sql .= "duration = '".$this->db->escape($this->duration_value.$this->duration_unit)."',";
|
||||||
$sql .= "note = '".$this->db->escape($this->note)."',";
|
$sql .= "note = '".$this->db->escape($this->note_public)."',";
|
||||||
$sql .= "vote = ".(integer) $this->db->escape($this->vote).",";
|
$sql .= "vote = ".(integer) $this->db->escape($this->vote).",";
|
||||||
$sql .= "mail_valid = '".$this->db->escape($this->mail_valid)."'";
|
$sql .= "mail_valid = '".$this->db->escape($this->mail_valid)."'";
|
||||||
$sql .= " WHERE rowid =".((int) $this->id);
|
$sql .= " WHERE rowid =".((int) $this->id);
|
||||||
|
|
||||||
$result = $this->db->query($sql);
|
$result = $this->db->query($sql);
|
||||||
if ($result) {
|
if ($result) {
|
||||||
$this->description = $this->db->escape($this->note);
|
$this->description = $this->db->escape($this->note_public);
|
||||||
|
|
||||||
// Multilangs
|
// Multilangs
|
||||||
if (!empty($conf->global->MAIN_MULTILANGS)) {
|
if (!empty($conf->global->MAIN_MULTILANGS)) {
|
||||||
@ -461,7 +471,7 @@ class AdherentType extends CommonObject
|
|||||||
{
|
{
|
||||||
global $langs, $conf;
|
global $langs, $conf;
|
||||||
|
|
||||||
$sql = "SELECT d.rowid, d.libelle as label, d.morphy, d.statut as status, d.duration, d.subscription, d.amount, d.mail_valid, d.note, d.vote";
|
$sql = "SELECT d.rowid, d.libelle as label, d.morphy, d.statut as status, d.duration, d.subscription, d.amount, d.mail_valid, d.note as note_public, d.vote";
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."adherent_type as d";
|
$sql .= " FROM ".MAIN_DB_PREFIX."adherent_type as d";
|
||||||
$sql .= " WHERE d.rowid = ".(int) $rowid;
|
$sql .= " WHERE d.rowid = ".(int) $rowid;
|
||||||
|
|
||||||
@ -483,7 +493,8 @@ class AdherentType extends CommonObject
|
|||||||
$this->subscription = $obj->subscription;
|
$this->subscription = $obj->subscription;
|
||||||
$this->amount = $obj->amount;
|
$this->amount = $obj->amount;
|
||||||
$this->mail_valid = $obj->mail_valid;
|
$this->mail_valid = $obj->mail_valid;
|
||||||
$this->note = $obj->note;
|
$this->note = $obj->note_public; // deprecated
|
||||||
|
$this->note_public = $obj->note_public;
|
||||||
$this->vote = $obj->vote;
|
$this->vote = $obj->vote;
|
||||||
|
|
||||||
// multilangs
|
// multilangs
|
||||||
@ -792,12 +803,16 @@ class AdherentType extends CommonObject
|
|||||||
// Object classes
|
// Object classes
|
||||||
$info["objectclass"] = explode(',', $conf->global->LDAP_MEMBER_TYPE_OBJECT_CLASS);
|
$info["objectclass"] = explode(',', $conf->global->LDAP_MEMBER_TYPE_OBJECT_CLASS);
|
||||||
|
|
||||||
|
if (empty($this->note_public) && !empty($this->note)) { // For backward compatibility
|
||||||
|
$this->note_public = $this->note;
|
||||||
|
}
|
||||||
|
|
||||||
// Champs
|
// Champs
|
||||||
if ($this->label && !empty($conf->global->LDAP_MEMBER_TYPE_FIELD_FULLNAME)) {
|
if ($this->label && !empty($conf->global->LDAP_MEMBER_TYPE_FIELD_FULLNAME)) {
|
||||||
$info[$conf->global->LDAP_MEMBER_TYPE_FIELD_FULLNAME] = $this->label;
|
$info[$conf->global->LDAP_MEMBER_TYPE_FIELD_FULLNAME] = $this->label;
|
||||||
}
|
}
|
||||||
if ($this->note && !empty($conf->global->LDAP_MEMBER_TYPE_FIELD_DESCRIPTION)) {
|
if ($this->note_public && !empty($conf->global->LDAP_MEMBER_TYPE_FIELD_DESCRIPTION)) {
|
||||||
$info[$conf->global->LDAP_MEMBER_TYPE_FIELD_DESCRIPTION] = dol_string_nohtmltag($this->note, 0, 'UTF-8', 1);
|
$info[$conf->global->LDAP_MEMBER_TYPE_FIELD_DESCRIPTION] = dol_string_nohtmltag($this->note_public, 0, 'UTF-8', 1);
|
||||||
}
|
}
|
||||||
if (!empty($conf->global->LDAP_MEMBER_TYPE_FIELD_GROUPMEMBERS)) {
|
if (!empty($conf->global->LDAP_MEMBER_TYPE_FIELD_GROUPMEMBERS)) {
|
||||||
$valueofldapfield = array();
|
$valueofldapfield = array();
|
||||||
@ -829,7 +844,7 @@ class AdherentType extends CommonObject
|
|||||||
$this->specimen = 1;
|
$this->specimen = 1;
|
||||||
|
|
||||||
$this->label = 'MEMBERS TYPE SPECIMEN';
|
$this->label = 'MEMBERS TYPE SPECIMEN';
|
||||||
$this->note = 'This is a note';
|
$this->note_public = 'This is a public note';
|
||||||
$this->mail_valid = 'This is welcome email';
|
$this->mail_valid = 'This is welcome email';
|
||||||
$this->subscription = 1;
|
$this->subscription = 1;
|
||||||
$this->vote = 0;
|
$this->vote = 0;
|
||||||
|
|||||||
@ -215,7 +215,7 @@ class Subscription extends CommonObject
|
|||||||
$sql .= " tms,";
|
$sql .= " tms,";
|
||||||
$sql .= " dateadh as dateh,";
|
$sql .= " dateadh as dateh,";
|
||||||
$sql .= " datef,";
|
$sql .= " datef,";
|
||||||
$sql .= " subscription, note, fk_bank";
|
$sql .= " subscription, note as note_public, fk_bank";
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."subscription";
|
$sql .= " FROM ".MAIN_DB_PREFIX."subscription";
|
||||||
$sql .= " WHERE rowid=".((int) $rowid);
|
$sql .= " WHERE rowid=".((int) $rowid);
|
||||||
|
|
||||||
@ -235,7 +235,8 @@ class Subscription extends CommonObject
|
|||||||
$this->dateh = $this->db->jdate($obj->dateh);
|
$this->dateh = $this->db->jdate($obj->dateh);
|
||||||
$this->datef = $this->db->jdate($obj->datef);
|
$this->datef = $this->db->jdate($obj->datef);
|
||||||
$this->amount = $obj->subscription;
|
$this->amount = $obj->subscription;
|
||||||
$this->note = $obj->note;
|
$this->note = $obj->note_public; // deprecated
|
||||||
|
$this->note_public = $obj->note_public;
|
||||||
$this->fk_bank = $obj->fk_bank;
|
$this->fk_bank = $obj->fk_bank;
|
||||||
return 1;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
@ -266,10 +267,14 @@ class Subscription extends CommonObject
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (empty($this->note_public) && !empty($this->note)) { // For backward compatibility
|
||||||
|
$this->note_public = $this->note;
|
||||||
|
}
|
||||||
|
|
||||||
$sql = "UPDATE ".MAIN_DB_PREFIX."subscription SET ";
|
$sql = "UPDATE ".MAIN_DB_PREFIX."subscription SET ";
|
||||||
$sql .= " fk_type = ".((int) $this->fk_type).",";
|
$sql .= " fk_type = ".((int) $this->fk_type).",";
|
||||||
$sql .= " fk_adherent = ".((int) $this->fk_adherent).",";
|
$sql .= " fk_adherent = ".((int) $this->fk_adherent).",";
|
||||||
$sql .= " note=".($this->note ? "'".$this->db->escape($this->note)."'" : 'null').",";
|
$sql .= " note=".($this->note_public ? "'".$this->db->escape($this->note_public)."'" : 'null').",";
|
||||||
$sql .= " subscription = ".price2num($this->amount).",";
|
$sql .= " subscription = ".price2num($this->amount).",";
|
||||||
$sql .= " dateadh='".$this->db->idate($this->dateh)."',";
|
$sql .= " dateadh='".$this->db->idate($this->dateh)."',";
|
||||||
$sql .= " datef='".$this->db->idate($this->datef)."',";
|
$sql .= " datef='".$this->db->idate($this->datef)."',";
|
||||||
|
|||||||
@ -1163,9 +1163,13 @@ if ($rowid > 0) {
|
|||||||
print dol_get_fiche_end();
|
print dol_get_fiche_end();
|
||||||
|
|
||||||
print '<div class="center">';
|
print '<div class="center">';
|
||||||
print '<input type="submit" class="button" name="add" value="'.$langs->trans("AddSubscription").'">';
|
$parameters = array();
|
||||||
print ' ';
|
$reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action);
|
||||||
print '<input type="submit" class="button button-cancel" name="cancel" value="'.$langs->trans("Cancel").'">';
|
if (empty($reshook)) {
|
||||||
|
print '<input type="submit" class="button" name="add" value="'.$langs->trans("AddSubscription").'">';
|
||||||
|
print ' ';
|
||||||
|
print '<input type="submit" class="button button-cancel" name="cancel" value="'.$langs->trans("Cancel").'">';
|
||||||
|
}
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
|
||||||
print '</form>';
|
print '</form>';
|
||||||
|
|||||||
@ -192,6 +192,7 @@ if (!empty($triggers)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($search_event === '' || preg_match('/'.preg_quote($search_event, '/').'/i', $trigger['code'])) {
|
if ($search_event === '' || preg_match('/'.preg_quote($search_event, '/').'/i', $trigger['code'])) {
|
||||||
|
print '<!-- '.$trigger['position'].' -->';
|
||||||
print '<tr class="oddeven">';
|
print '<tr class="oddeven">';
|
||||||
print '<td>'.$trigger['code'].'</td>';
|
print '<td>'.$trigger['code'].'</td>';
|
||||||
print '<td>'.$trigger['label'].'</td>';
|
print '<td>'.$trigger['label'].'</td>';
|
||||||
|
|||||||
@ -41,6 +41,8 @@ $langs->loadLangs(array('admin', 'other', 'agenda', 'users'));
|
|||||||
|
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$value = GETPOST('value', 'alpha');
|
$value = GETPOST('value', 'alpha');
|
||||||
|
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||||
|
|
||||||
$param = GETPOST('param', 'alpha');
|
$param = GETPOST('param', 'alpha');
|
||||||
$cancel = GETPOST('cancel', 'alpha');
|
$cancel = GETPOST('cancel', 'alpha');
|
||||||
$scandir = GETPOST('scan_dir', 'alpha');
|
$scandir = GETPOST('scan_dir', 'alpha');
|
||||||
|
|||||||
@ -36,6 +36,8 @@ $langs->loadLangs(array("admin", "other", "agenda"));
|
|||||||
|
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$value = GETPOST('value', 'alpha');
|
$value = GETPOST('value', 'alpha');
|
||||||
|
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||||
|
|
||||||
$param = GETPOST('param', 'alpha');
|
$param = GETPOST('param', 'alpha');
|
||||||
$cancel = GETPOST('cancel', 'alpha');
|
$cancel = GETPOST('cancel', 'alpha');
|
||||||
$scandir = GETPOST('scandir', 'alpha');
|
$scandir = GETPOST('scandir', 'alpha');
|
||||||
|
|||||||
@ -36,6 +36,7 @@ if (!$user->admin) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
|
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@ -36,6 +36,8 @@ if (!$user->admin) {
|
|||||||
|
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$value = GETPOST('value', 'alpha');
|
$value = GETPOST('value', 'alpha');
|
||||||
|
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||||
|
|
||||||
$label = GETPOST('label', 'alpha');
|
$label = GETPOST('label', 'alpha');
|
||||||
$scandir = GETPOST('scan_dir', 'alpha');
|
$scandir = GETPOST('scan_dir', 'alpha');
|
||||||
$type = 'bom';
|
$type = 'bom';
|
||||||
|
|||||||
@ -46,6 +46,8 @@ if (!$user->admin) {
|
|||||||
|
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$value = GETPOST('value', 'alpha');
|
$value = GETPOST('value', 'alpha');
|
||||||
|
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||||
|
|
||||||
$label = GETPOST('label', 'alpha');
|
$label = GETPOST('label', 'alpha');
|
||||||
$scandir = GETPOST('scan_dir', 'alpha');
|
$scandir = GETPOST('scan_dir', 'alpha');
|
||||||
$type = 'order';
|
$type = 'order';
|
||||||
@ -158,18 +160,6 @@ if ($action == 'updateMask') {
|
|||||||
$error++;
|
$error++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$error) {
|
|
||||||
setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
|
|
||||||
} else {
|
|
||||||
setEventMessages($langs->trans("Error"), null, 'errors');
|
|
||||||
}
|
|
||||||
} elseif ($action == "setshippableiconinlist") {
|
|
||||||
// Activate Set Shippable Icon In List
|
|
||||||
$setshippableiconinlist = GETPOST('value', 'int');
|
|
||||||
$res = dolibarr_set_const($db, "SHIPPABLE_ORDER_ICON_IN_LIST", $setshippableiconinlist, 'yesno', 0, '', $conf->entity);
|
|
||||||
if (!($res > 0)) {
|
|
||||||
$error++;
|
|
||||||
}
|
|
||||||
if (!$error) {
|
if (!$error) {
|
||||||
setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
|
setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
|
||||||
} else {
|
} else {
|
||||||
@ -646,25 +636,6 @@ print '<input type="submit" class="button button-edit" value="'.$langs->trans("M
|
|||||||
print "</td></tr>\n";
|
print "</td></tr>\n";
|
||||||
print '</form>';
|
print '</form>';
|
||||||
|
|
||||||
// Shippable Icon in List
|
|
||||||
/* Kept as hidden feature for the moment, result seems bugged.
|
|
||||||
Where is definition of "shippable" according to all different STOCK_CALCULATE_... options ?
|
|
||||||
|
|
||||||
print '<tr class="oddeven">';
|
|
||||||
print '<td>'.$langs->trans("ShippableOrderIconInList").'</td>';
|
|
||||||
print '<td> </td>';
|
|
||||||
print '<td class="center">';
|
|
||||||
if (!empty($conf->global->SHIPPABLE_ORDER_ICON_IN_LIST)) {
|
|
||||||
print '<a href="'.$_SERVER['PHP_SELF'].'?action=setshippableiconinlist&token='.newToken().'&value=0">';
|
|
||||||
print img_picto($langs->trans("Activated"),'switch_on');
|
|
||||||
} else {
|
|
||||||
print '<a href="'.$_SERVER['PHP_SELF'].'?action=setshippableiconinlist&token='.newToken().'&value=1">';
|
|
||||||
print img_picto($langs->trans("Disabled"),'switch_off');
|
|
||||||
}
|
|
||||||
print '</a></td>';
|
|
||||||
print '</tr>';
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
// Seems to be not so used. So kept hidden for the moment to avoid dangerous options inflation.
|
// Seems to be not so used. So kept hidden for the moment to avoid dangerous options inflation.
|
||||||
// Ask for payment bank during order
|
// Ask for payment bank during order
|
||||||
|
|||||||
@ -37,6 +37,8 @@ if (!$user->admin) {
|
|||||||
|
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$value = GETPOST('value', 'alpha');
|
$value = GETPOST('value', 'alpha');
|
||||||
|
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||||
|
|
||||||
$label = GETPOST('label', 'alpha');
|
$label = GETPOST('label', 'alpha');
|
||||||
$scandir = GETPOST('scan_dir', 'alpha');
|
$scandir = GETPOST('scan_dir', 'alpha');
|
||||||
$type = 'contract';
|
$type = 'contract';
|
||||||
|
|||||||
@ -43,6 +43,8 @@ if (!$user->admin) {
|
|||||||
|
|
||||||
$action = GETPOST('action', 'alpha');
|
$action = GETPOST('action', 'alpha');
|
||||||
$value = GETPOST('value', 'alpha');
|
$value = GETPOST('value', 'alpha');
|
||||||
|
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||||
|
|
||||||
$label = GETPOST('label', 'alpha');
|
$label = GETPOST('label', 'alpha');
|
||||||
$scandir = GETPOST('scan_dir', 'alpha');
|
$scandir = GETPOST('scan_dir', 'alpha');
|
||||||
$type = 'delivery';
|
$type = 'delivery';
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
* Copyright (C) 2004-2018 Laurent Destailleur <eldy@users.sourceforge.net>
|
* Copyright (C) 2004-2018 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
* Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be>
|
* Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be>
|
||||||
* Copyright (C) 2005-2017 Regis Houssin <regis.houssin@inodbox.com>
|
* Copyright (C) 2005-2017 Regis Houssin <regis.houssin@inodbox.com>
|
||||||
* Copyright (C) 2010-2016 Juanjo Menent <jmenent@2byte.es>
|
* Copyright (C) 2010-2022 Juanjo Menent <jmenent@2byte.es>
|
||||||
* Copyright (C) 2011-2021 Philippe Grand <philippe.grand@atoo-net.com>
|
* Copyright (C) 2011-2021 Philippe Grand <philippe.grand@atoo-net.com>
|
||||||
* Copyright (C) 2011 Remy Younes <ryounes@gmail.com>
|
* Copyright (C) 2011 Remy Younes <ryounes@gmail.com>
|
||||||
* Copyright (C) 2012-2015 Marcos García <marcosgdf@gmail.com>
|
* Copyright (C) 2012-2015 Marcos García <marcosgdf@gmail.com>
|
||||||
@ -2408,6 +2408,31 @@ function fieldList($fieldlist, $obj = '', $tabname = '', $context = '')
|
|||||||
$fieldValue = '0';
|
$fieldValue = '0';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Labels Length
|
||||||
|
$maxlength = '';
|
||||||
|
if (in_array($fieldlist[$field], array('libelle', 'label'))) {
|
||||||
|
switch ($tabname) {
|
||||||
|
case MAIN_DB_PREFIX . 'c_accounting_category':
|
||||||
|
case MAIN_DB_PREFIX . 'c_ecotaxe':
|
||||||
|
case MAIN_DB_PREFIX . 'c_email_senderprofile':
|
||||||
|
case MAIN_DB_PREFIX . 'c_forme_juridique':
|
||||||
|
case MAIN_DB_PREFIX . 'c_holiday_types':
|
||||||
|
case MAIN_DB_PREFIX . 'c_payment_term':
|
||||||
|
case MAIN_DB_PREFIX . 'c_transport_mode':
|
||||||
|
$maxlength = ' maxlength="255"';
|
||||||
|
break;
|
||||||
|
case MAIN_DB_PREFIX . 'c_email_templates':
|
||||||
|
$maxlength = ' maxlength="180"';
|
||||||
|
break;
|
||||||
|
case MAIN_DB_PREFIX . 'c_socialnetworks':
|
||||||
|
$maxlength = ' maxlength="150"';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$maxlength = ' maxlength="128"';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
print '<td class="'.$classtd.'">';
|
print '<td class="'.$classtd.'">';
|
||||||
$transfound = 0;
|
$transfound = 0;
|
||||||
$transkey = '';
|
$transkey = '';
|
||||||
@ -2426,7 +2451,7 @@ function fieldList($fieldlist, $obj = '', $tabname = '', $context = '')
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!$transfound) {
|
if (!$transfound) {
|
||||||
print '<input type="text" class="flat'.($class ? ' '.$class : '').'" value="'.dol_escape_htmltag($fieldValue).'" name="'.$fieldlist[$field].'">';
|
print '<input type="text" class="flat'.($class ? ' '.$class : '').'"'.($maxlength ? ' '.$maxlength : '').' value="'.dol_escape_htmltag($fieldValue).'" name="'.$fieldlist[$field].'">';
|
||||||
} else {
|
} else {
|
||||||
print '<input type="hidden" name="'.$fieldlist[$field].'" value="'.$transkey.'">';
|
print '<input type="hidden" name="'.$fieldlist[$field].'" value="'.$transkey.'">';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
|
|
||||||
div.divsearchfield {
|
div.divsearchfield {
|
||||||
float: left;
|
|
||||||
margin: 4px 12px 4px 2px;
|
margin: 4px 12px 4px 2px;
|
||||||
padding-left: 2px;
|
padding-left: 2px;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -32,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/eventorganization.lib.php';
|
|||||||
require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
|
||||||
|
|
||||||
// Translations
|
// Translations
|
||||||
$langs->loadLangs(array("admin", "eventorganization"));
|
$langs->loadLangs(array("admin", "eventorganization", "categories"));
|
||||||
|
|
||||||
// Parameters
|
// Parameters
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
@ -41,6 +41,8 @@ $backtopage = GETPOST('backtopage', 'alpha');
|
|||||||
|
|
||||||
$value = GETPOST('value', 'alpha');
|
$value = GETPOST('value', 'alpha');
|
||||||
$label = GETPOST('label', 'alpha');
|
$label = GETPOST('label', 'alpha');
|
||||||
|
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||||
|
|
||||||
$scandir = GETPOST('scan_dir', 'alpha');
|
$scandir = GETPOST('scan_dir', 'alpha');
|
||||||
$type = 'myobject';
|
$type = 'myobject';
|
||||||
|
|
||||||
@ -54,11 +56,11 @@ $arrayofparameters = array(
|
|||||||
'EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_BOOTH'=>array('type'=>'emailtemplate:conferenceorbooth', 'enabled'=>1),
|
'EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_BOOTH'=>array('type'=>'emailtemplate:conferenceorbooth', 'enabled'=>1),
|
||||||
'EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_BOOTH'=>array('type'=>'emailtemplate:conferenceorbooth', 'enabled'=>1),
|
'EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_BOOTH'=>array('type'=>'emailtemplate:conferenceorbooth', 'enabled'=>1),
|
||||||
'EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_EVENT'=>array('type'=>'emailtemplate:conferenceorbooth', 'enabled'=>1),
|
'EVENTORGANIZATION_TEMPLATE_EMAIL_AFT_SUBS_EVENT'=>array('type'=>'emailtemplate:conferenceorbooth', 'enabled'=>1),
|
||||||
'EVENTORGANIZATION_TEMPLATE_EMAIL_BULK_SPEAKER'=>array('type'=>'emailtemplate:conferenceorbooth', 'enabled'=>1),
|
//'EVENTORGANIZATION_TEMPLATE_EMAIL_BULK_SPEAKER'=>array('type'=>'emailtemplate:conferenceorbooth', 'enabled'=>1),
|
||||||
'EVENTORGANIZATION_TEMPLATE_EMAIL_BULK_ATTENDES'=>array('type'=>'emailtemplate:conferenceorbooth', 'enabled'=>1),
|
//'EVENTORGANIZATION_TEMPLATE_EMAIL_BULK_ATTENDES'=>array('type'=>'emailtemplate:conferenceorbooth', 'enabled'=>1),
|
||||||
'EVENTORGANIZATION_SECUREKEY'=>array('type'=>'securekey', 'enabled'=>1),
|
|
||||||
'SERVICE_BOOTH_LOCATION'=>array('type'=>'product', 'enabled'=>1),
|
'SERVICE_BOOTH_LOCATION'=>array('type'=>'product', 'enabled'=>1),
|
||||||
'SERVICE_CONFERENCE_ATTENDEE_SUBSCRIPTION'=>array('type'=>'product', 'enabled'=>1),
|
'SERVICE_CONFERENCE_ATTENDEE_SUBSCRIPTION'=>array('type'=>'product', 'enabled'=>1),
|
||||||
|
'EVENTORGANIZATION_SECUREKEY'=>array('type'=>'securekey', 'enabled'=>1),
|
||||||
);
|
);
|
||||||
|
|
||||||
$error = 0;
|
$error = 0;
|
||||||
|
|||||||
@ -43,6 +43,8 @@ if (!$user->admin) {
|
|||||||
|
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$value = GETPOST('value', 'alpha');
|
$value = GETPOST('value', 'alpha');
|
||||||
|
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||||
|
|
||||||
$label = GETPOST('label', 'alpha');
|
$label = GETPOST('label', 'alpha');
|
||||||
$scandir = GETPOST('scan_dir', 'alpha');
|
$scandir = GETPOST('scan_dir', 'alpha');
|
||||||
$type = 'shipping';
|
$type = 'shipping';
|
||||||
|
|||||||
@ -43,6 +43,8 @@ if (!$user->admin) {
|
|||||||
|
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$value = GETPOST('value', 'alpha');
|
$value = GETPOST('value', 'alpha');
|
||||||
|
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||||
|
|
||||||
$label = GETPOST('label', 'alpha');
|
$label = GETPOST('label', 'alpha');
|
||||||
$scandir = GETPOST('scan_dir', 'alpha');
|
$scandir = GETPOST('scan_dir', 'alpha');
|
||||||
$type = 'expensereport';
|
$type = 'expensereport';
|
||||||
|
|||||||
@ -42,6 +42,8 @@ if (!$user->admin) {
|
|||||||
|
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$value = GETPOST('value', 'alpha');
|
$value = GETPOST('value', 'alpha');
|
||||||
|
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||||
|
|
||||||
$label = GETPOST('label', 'alpha');
|
$label = GETPOST('label', 'alpha');
|
||||||
$scandir = GETPOST('scan_dir', 'alpha');
|
$scandir = GETPOST('scan_dir', 'alpha');
|
||||||
$type = 'invoice';
|
$type = 'invoice';
|
||||||
|
|||||||
@ -28,24 +28,93 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
require '../main.inc.php';
|
require '../main.inc.php';
|
||||||
|
|
||||||
|
// Libraries
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php';
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/invoice.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/invoice.lib.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formsetup.class.php';
|
||||||
|
|
||||||
// Load translation files required by the page
|
// Load translation files required by the page
|
||||||
$langs->loadLangs(array('admin', 'errors', 'other', 'bills'));
|
$langs->loadLangs(array('admin', 'errors', 'other', 'bills'));
|
||||||
|
|
||||||
|
// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
|
||||||
|
$hookmanager->initHooks(array('situationinvoicesetup', 'globalsetup'));
|
||||||
|
|
||||||
|
// Access control
|
||||||
if (!$user->admin) {
|
if (!$user->admin) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
|
$backtopage = GETPOST('backtopage', 'alpha');
|
||||||
|
|
||||||
$value = GETPOST('value', 'alpha');
|
$value = GETPOST('value', 'alpha');
|
||||||
$label = GETPOST('label', 'alpha');
|
$label = GETPOST('label', 'alpha');
|
||||||
|
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||||
|
|
||||||
$scandir = GETPOST('scan_dir', 'alpha');
|
$scandir = GETPOST('scan_dir', 'alpha');
|
||||||
$type = 'invoice';
|
$type = 'invoice';
|
||||||
|
|
||||||
|
$form = new Form($db);
|
||||||
|
$formSetup = new FormSetup($db);
|
||||||
|
|
||||||
|
|
||||||
|
// Setup conf MYMODULE_MYPARAM4 : exemple of quick define write style
|
||||||
|
$formSetup->newItem('INVOICE_USE_SITUATION')
|
||||||
|
->setAsYesNo()
|
||||||
|
->nameText = $langs->trans('UseSituationInvoices');
|
||||||
|
|
||||||
|
$item = $formSetup->newItem('INVOICE_USE_SITUATION_CREDIT_NOTE')
|
||||||
|
->setAsYesNo()
|
||||||
|
->nameText = $langs->trans('UseSituationInvoicesCreditNote');
|
||||||
|
|
||||||
|
//$item = $formSetup->newItem('INVOICE_USE_RETAINED_WARRANTY')
|
||||||
|
// ->setAsYesNo()
|
||||||
|
// ->nameText = $langs->trans('Retainedwarranty');
|
||||||
|
|
||||||
|
|
||||||
|
$item = $formSetup->newItem('INVOICE_USE_RETAINED_WARRANTY');
|
||||||
|
$item->nameText = $langs->trans('AllowedInvoiceForRetainedWarranty');
|
||||||
|
|
||||||
|
$arrayAvailableType = array(
|
||||||
|
Facture::TYPE_SITUATION => $langs->trans("InvoiceSituation"),
|
||||||
|
Facture::TYPE_STANDARD.'+'.Facture::TYPE_SITUATION => $langs->trans("InvoiceSituation").' + '.$langs->trans("InvoiceStandard"),
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($action == 'edit') {
|
||||||
|
$item->fieldInputOverride = $form->selectarray('INVOICE_USE_RETAINED_WARRANTY', $arrayAvailableType, $conf->global->INVOICE_USE_RETAINED_WARRANTY, 1);
|
||||||
|
} else {
|
||||||
|
$item->fieldOutputOverride= isset($arrayAvailableType[$conf->global->INVOICE_USE_RETAINED_WARRANTY])?$arrayAvailableType[$conf->global->INVOICE_USE_RETAINED_WARRANTY]:'';
|
||||||
|
}
|
||||||
|
|
||||||
|
//$item = $formSetup->newItem('INVOICE_RETAINED_WARRANTY_LIMITED_TO_SITUATION')->setAsYesNo();
|
||||||
|
//$item->nameText = $langs->trans('RetainedwarrantyOnlyForSituation');
|
||||||
|
|
||||||
|
$formSetup->newItem('INVOICE_RETAINED_WARRANTY_LIMITED_TO_FINAL_SITUATION')
|
||||||
|
->setAsYesNo()
|
||||||
|
->nameText = $langs->trans('RetainedwarrantyOnlyForSituationFinal');
|
||||||
|
|
||||||
|
|
||||||
|
$item = $formSetup->newItem('INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_PERCENT');
|
||||||
|
$item->nameText = $langs->trans('RetainedwarrantyDefaultPercent');
|
||||||
|
$item->fieldAttr = array(
|
||||||
|
'type' => 'number',
|
||||||
|
'step' => '0.01',
|
||||||
|
'min' => 0,
|
||||||
|
'max' => 100
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Conditions paiements
|
||||||
|
$item = $formSetup->newItem('INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_COND_ID');
|
||||||
|
$item->nameText = $langs->trans('PaymentConditionsShortRetainedWarranty');
|
||||||
|
$form->load_cache_conditions_paiements();
|
||||||
|
if (!empty($conf->global->INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_COND_ID) && isset($form->cache_conditions_paiements[$conf->global->INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_COND_ID]['label'])) {
|
||||||
|
$item->fieldOutputOverride = $form->cache_conditions_paiements[$conf->global->INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_COND_ID]['label'];
|
||||||
|
}
|
||||||
|
$item->fieldInputOverride = $form->getSelectConditionsPaiements($conf->global->INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_COND_ID, 'INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_COND_ID', -1, 1);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Actions
|
* Actions
|
||||||
@ -67,7 +136,6 @@ llxHeader(
|
|||||||
'EN:Invoice_Configuration|FR:Configuration_module_facture|ES:ConfiguracionFactura'
|
'EN:Invoice_Configuration|FR:Configuration_module_facture|ES:ConfiguracionFactura'
|
||||||
);
|
);
|
||||||
|
|
||||||
$form = new Form($db);
|
|
||||||
|
|
||||||
|
|
||||||
$linkback = '<a href="'.DOL_URL_ROOT.'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans("BackToModuleList").'</a>';
|
$linkback = '<a href="'.DOL_URL_ROOT.'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans("BackToModuleList").'</a>';
|
||||||
@ -84,170 +152,25 @@ print '<span class="opacitymedium">'.$langs->trans("InvoiceFirstSituationDesc").
|
|||||||
* Numbering module
|
* Numbering module
|
||||||
*/
|
*/
|
||||||
|
|
||||||
print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
|
if ($action == 'edit') {
|
||||||
print '<input type="hidden" name="token" value="'.newToken().'">';
|
print $formSetup->generateOutput(true);
|
||||||
|
} else {
|
||||||
|
print $formSetup->generateOutput();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count($formSetup->items) > 0) {
|
||||||
|
if ($action != 'edit') {
|
||||||
|
print '<div class="tabsAction">';
|
||||||
|
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=edit&token='.newToken().'">'.$langs->trans("Modify").'</a>';
|
||||||
|
print '</div>';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
print '<br>'.$langs->trans("NothingToSetup");
|
||||||
|
}
|
||||||
|
|
||||||
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 '<td>'.$langs->trans("Parameter").'</td>';
|
|
||||||
print '<td align="center" width="60">'.$langs->trans("Value").'</td>';
|
|
||||||
print '<td width="80"> </td>';
|
|
||||||
print "</tr>\n";
|
|
||||||
|
|
||||||
_printOnOff('INVOICE_USE_SITUATION', $langs->trans('UseSituationInvoices'));
|
|
||||||
_printOnOff('INVOICE_USE_SITUATION_CREDIT_NOTE', $langs->trans('UseSituationInvoicesCreditNote'));
|
|
||||||
//_printOnOff('INVOICE_USE_RETAINED_WARRANTY', $langs->trans('Retainedwarranty'));
|
|
||||||
|
|
||||||
$confkey = 'INVOICE_USE_RETAINED_WARRANTY';
|
|
||||||
|
|
||||||
$arrayAvailableType = array(
|
|
||||||
Facture::TYPE_SITUATION => $langs->trans("InvoiceSituation"),
|
|
||||||
Facture::TYPE_STANDARD.'+'.Facture::TYPE_SITUATION => $langs->trans("InvoiceSituation").' + '.$langs->trans("InvoiceStandard"),
|
|
||||||
);
|
|
||||||
$selected = $conf->global->$confkey;
|
|
||||||
$curentInput = (empty($inputCount) ? 1 : ($inputCount + 1));
|
|
||||||
$formSelectInvoiceType = $form->selectarray('value'.$curentInput, $arrayAvailableType, $selected, 1);
|
|
||||||
_printInputFormPart($confkey, $langs->trans('AllowedInvoiceForRetainedWarranty'), '', array(), $formSelectInvoiceType);
|
|
||||||
|
|
||||||
//_printOnOff('INVOICE_RETAINED_WARRANTY_LIMITED_TO_SITUATION', $langs->trans('RetainedwarrantyOnlyForSituation'));
|
|
||||||
_printOnOff('INVOICE_RETAINED_WARRANTY_LIMITED_TO_FINAL_SITUATION', $langs->trans('RetainedwarrantyOnlyForSituationFinal'));
|
|
||||||
|
|
||||||
$metas = array(
|
|
||||||
'type' => 'number',
|
|
||||||
'step' => '0.01',
|
|
||||||
'min' => 0,
|
|
||||||
'max' => 100
|
|
||||||
);
|
|
||||||
_printInputFormPart('INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_PERCENT', $langs->trans('RetainedwarrantyDefaultPercent'), '', $metas);
|
|
||||||
|
|
||||||
// Conditions paiements
|
|
||||||
$inputCount = empty($inputCount) ? 1 : ($inputCount + 1);
|
|
||||||
print '<tr class="oddeven">';
|
|
||||||
print '<td>'.$langs->trans('PaymentConditionsShortRetainedWarranty').'</td>';
|
|
||||||
print '<td class="center" width="20"> </td>';
|
|
||||||
print '<td class="right" width="300">';
|
|
||||||
print '<input type="hidden" name="param'.$inputCount.'" value="INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_COND_ID">';
|
|
||||||
$form->select_conditions_paiements($conf->global->INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_COND_ID, 'value'.$inputCount, -1, 1);
|
|
||||||
print '</td></tr>';
|
|
||||||
|
|
||||||
|
|
||||||
print '</table>';
|
|
||||||
print '</div>';
|
|
||||||
|
|
||||||
print '<br>';
|
|
||||||
|
|
||||||
_updateBtn();
|
|
||||||
|
|
||||||
print '</form>';
|
|
||||||
|
|
||||||
print dol_get_fiche_end();
|
print dol_get_fiche_end();
|
||||||
|
|
||||||
// End of page
|
// End of page
|
||||||
llxFooter();
|
llxFooter();
|
||||||
$db->close();
|
$db->close();
|
||||||
|
|
||||||
/**
|
|
||||||
* Print an update button
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
function _updateBtn()
|
|
||||||
{
|
|
||||||
global $langs;
|
|
||||||
print '<div class="center">';
|
|
||||||
print '<input type="submit" class="button button-save" value="'.$langs->trans("Save").'">';
|
|
||||||
print '</div>';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print a On/Off button
|
|
||||||
*
|
|
||||||
* @param string $confkey the conf key
|
|
||||||
* @param bool $title Title of conf
|
|
||||||
* @param string $desc Description
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
function _printOnOff($confkey, $title = false, $desc = '')
|
|
||||||
{
|
|
||||||
global $langs;
|
|
||||||
|
|
||||||
print '<tr class="oddeven">';
|
|
||||||
print '<td>'.($title ? $title : $langs->trans($confkey));
|
|
||||||
if (!empty($desc)) {
|
|
||||||
print '<br><small>'.$langs->trans($desc).'</small>';
|
|
||||||
}
|
|
||||||
print '</td>';
|
|
||||||
print '<td class="center" width="20"> </td>';
|
|
||||||
print '<td class="right" width="300">';
|
|
||||||
print ajax_constantonoff($confkey);
|
|
||||||
print '</td></tr>';
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Print a form part
|
|
||||||
*
|
|
||||||
* @param string $confkey the conf key
|
|
||||||
* @param bool $title Title of conf
|
|
||||||
* @param string $desc Description of
|
|
||||||
* @param array $metas html meta
|
|
||||||
* @param string $type type of input textarea or input
|
|
||||||
* @param bool $help help description
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
function _printInputFormPart($confkey, $title = false, $desc = '', $metas = array(), $type = 'input', $help = false)
|
|
||||||
{
|
|
||||||
global $langs, $conf, $db, $inputCount;
|
|
||||||
|
|
||||||
$inputCount = empty($inputCount) ? 1 : ($inputCount + 1);
|
|
||||||
$form = new Form($db);
|
|
||||||
|
|
||||||
$defaultMetas = array(
|
|
||||||
'name' => 'value'.$inputCount
|
|
||||||
);
|
|
||||||
|
|
||||||
if ($type != 'textarea') {
|
|
||||||
$defaultMetas['type'] = 'text';
|
|
||||||
$defaultMetas['value'] = $conf->global->{$confkey};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
$metas = array_merge($defaultMetas, $metas);
|
|
||||||
$metascompil = '';
|
|
||||||
foreach ($metas as $key => $values) {
|
|
||||||
$metascompil .= ' '.$key.'="'.$values.'" ';
|
|
||||||
}
|
|
||||||
|
|
||||||
print '<tr class="oddeven">';
|
|
||||||
print '<td>';
|
|
||||||
|
|
||||||
if (!empty($help)) {
|
|
||||||
print $form->textwithtooltip(($title ? $title : $langs->trans($confkey)), $langs->trans($help), 2, 1, img_help(1, ''));
|
|
||||||
} else {
|
|
||||||
print $title ? $title : $langs->trans($confkey);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty($desc)) {
|
|
||||||
print '<br><small>'.$langs->trans($desc).'</small>';
|
|
||||||
}
|
|
||||||
|
|
||||||
print '</td>';
|
|
||||||
print '<td class="center" width="20"> </td>';
|
|
||||||
print '<td class="right" width="300">';
|
|
||||||
print '<input type="hidden" name="param'.$inputCount.'" value="'.$confkey.'">';
|
|
||||||
print '<input type="hidden" name="action" value="setModuleOptions">';
|
|
||||||
if ($type == 'textarea') {
|
|
||||||
print '<textarea '.$metascompil.' >'.dol_htmlentities($conf->global->{$confkey}).'</textarea>';
|
|
||||||
} elseif ($type == 'input') {
|
|
||||||
print '<input '.$metascompil.' />';
|
|
||||||
} else {
|
|
||||||
// custom
|
|
||||||
print $type;
|
|
||||||
}
|
|
||||||
print '</td></tr>';
|
|
||||||
}
|
|
||||||
|
|||||||
@ -43,6 +43,8 @@ if (!$user->admin) {
|
|||||||
|
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$value = GETPOST('value', 'alpha');
|
$value = GETPOST('value', 'alpha');
|
||||||
|
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||||
|
|
||||||
$label = GETPOST('label', 'alpha');
|
$label = GETPOST('label', 'alpha');
|
||||||
$scandir = GETPOST('scan_dir', 'alpha');
|
$scandir = GETPOST('scan_dir', 'alpha');
|
||||||
$type = 'ficheinter';
|
$type = 'ficheinter';
|
||||||
|
|||||||
@ -39,6 +39,8 @@ if (!$user->admin) {
|
|||||||
|
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$value = GETPOST('value', 'alpha');
|
$value = GETPOST('value', 'alpha');
|
||||||
|
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||||
|
|
||||||
$label = GETPOST('label', 'alpha');
|
$label = GETPOST('label', 'alpha');
|
||||||
$scandir = GETPOST('scan_dir', 'alpha');
|
$scandir = GETPOST('scan_dir', 'alpha');
|
||||||
$type = 'contract';
|
$type = 'contract';
|
||||||
|
|||||||
@ -50,6 +50,8 @@ $backtopage = GETPOST('backtopage', 'alpha');
|
|||||||
|
|
||||||
$value = GETPOST('value', 'alpha');
|
$value = GETPOST('value', 'alpha');
|
||||||
$label = GETPOST('label', 'alpha');
|
$label = GETPOST('label', 'alpha');
|
||||||
|
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||||
|
|
||||||
$scandir = GETPOST('scan_dir', 'alpha');
|
$scandir = GETPOST('scan_dir', 'alpha');
|
||||||
$type = 'myobject';
|
$type = 'myobject';
|
||||||
|
|
||||||
|
|||||||
@ -5,6 +5,7 @@
|
|||||||
* Copyright (C) 2016 Juanjo Menent <jmenent@2byte.es>
|
* Copyright (C) 2016 Juanjo Menent <jmenent@2byte.es>
|
||||||
* Copyright (C) 2018 Ferran Marcet <fmarcet@2byte.es>
|
* Copyright (C) 2018 Ferran Marcet <fmarcet@2byte.es>
|
||||||
* Copyright (C) 2021 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
* Copyright (C) 2021 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||||
|
* Copyright (C) 2021 Anthony Berton <bertonanthony@gmail.com>
|
||||||
*
|
*
|
||||||
* 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
|
||||||
@ -199,6 +200,20 @@ if ($action == 'update') {
|
|||||||
} else {
|
} else {
|
||||||
dolibarr_set_const($db, "THEME_ELDY_USE_CHECKED", $val, 'chaine', 0, '', $conf->entity);
|
dolibarr_set_const($db, "THEME_ELDY_USE_CHECKED", $val, 'chaine', 0, '', $conf->entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$val=(implode(',', (colorStringToArray(GETPOST('THEME_ELDY_BTNACTION'), array()))));
|
||||||
|
if ($val == '') {
|
||||||
|
dolibarr_del_const($db, 'THEME_ELDY_BTNACTION', $conf->entity);
|
||||||
|
} else {
|
||||||
|
dolibarr_set_const($db, 'THEME_ELDY_BTNACTION', $val, 'chaine', 0, '', $conf->entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
$val=(implode(',', (colorStringToArray(GETPOST('THEME_ELDY_TEXTBTNACTION'), array()))));
|
||||||
|
if ($val == '') {
|
||||||
|
dolibarr_del_const($db, 'THEME_ELDY_TEXTBTNACTION', $conf->entity);
|
||||||
|
} else {
|
||||||
|
dolibarr_set_const($db, 'THEME_ELDY_TEXTBTNACTION', $val, 'chaine', 0, '', $conf->entity);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($mode == 'dashboard') {
|
if ($mode == 'dashboard') {
|
||||||
|
|||||||
@ -41,6 +41,8 @@ if (!$user->admin) {
|
|||||||
|
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$value = GETPOST('value', 'alpha');
|
$value = GETPOST('value', 'alpha');
|
||||||
|
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Actions
|
* Actions
|
||||||
|
|||||||
@ -47,6 +47,7 @@ llxHeader('', $langs->trans("Setup"), $wikihelp);
|
|||||||
|
|
||||||
print load_fiche_titre($langs->trans("SetupArea"), '', 'tools');
|
print load_fiche_titre($langs->trans("SetupArea"), '', 'tools');
|
||||||
|
|
||||||
|
|
||||||
if (!empty($conf->global->MAIN_MOTD_SETUPPAGE)) {
|
if (!empty($conf->global->MAIN_MOTD_SETUPPAGE)) {
|
||||||
$conf->global->MAIN_MOTD_SETUPPAGE = preg_replace('/<br(\s[\sa-zA-Z_="]*)?\/?>/i', '<br>', $conf->global->MAIN_MOTD_SETUPPAGE);
|
$conf->global->MAIN_MOTD_SETUPPAGE = preg_replace('/<br(\s[\sa-zA-Z_="]*)?\/?>/i', '<br>', $conf->global->MAIN_MOTD_SETUPPAGE);
|
||||||
if (!empty($conf->global->MAIN_MOTD_SETUPPAGE)) {
|
if (!empty($conf->global->MAIN_MOTD_SETUPPAGE)) {
|
||||||
@ -76,12 +77,15 @@ print $langs->trans("SetupDescription2", $langs->transnoentities("MenuCompanySet
|
|||||||
print "<br><br>";
|
print "<br><br>";
|
||||||
print '</span>';
|
print '</span>';
|
||||||
|
|
||||||
print '<br><br>';
|
print '<br>';
|
||||||
|
|
||||||
// Show info setup company
|
// Show info setup company
|
||||||
if (empty($conf->global->MAIN_INFO_SOCIETE_NOM) || empty($conf->global->MAIN_INFO_SOCIETE_COUNTRY)) {
|
if (empty($conf->global->MAIN_INFO_SOCIETE_NOM) || empty($conf->global->MAIN_INFO_SOCIETE_COUNTRY)) {
|
||||||
$setupcompanynotcomplete = 1;
|
$setupcompanynotcomplete = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
print '<section class="setupsection">';
|
||||||
|
|
||||||
print img_picto('', 'company', 'class="paddingright valignmiddle double"').' '.$langs->trans("SetupDescriptionLink", DOL_URL_ROOT.'/admin/company.php?mainmenu=home'.(empty($setupcompanynotcomplete) ? '' : '&action=edit&token='.newToken()), $langs->transnoentities("Setup"), $langs->transnoentities("MenuCompanySetup"));
|
print img_picto('', 'company', 'class="paddingright valignmiddle double"').' '.$langs->trans("SetupDescriptionLink", DOL_URL_ROOT.'/admin/company.php?mainmenu=home'.(empty($setupcompanynotcomplete) ? '' : '&action=edit&token='.newToken()), $langs->transnoentities("Setup"), $langs->transnoentities("MenuCompanySetup"));
|
||||||
print '<br><br>';
|
print '<br><br>';
|
||||||
print $langs->trans("SetupDescription3b");
|
print $langs->trans("SetupDescription3b");
|
||||||
@ -90,10 +94,13 @@ if (!empty($setupcompanynotcomplete)) {
|
|||||||
$warnpicto = img_warning($langs->trans("WarningMandatorySetupNotComplete"), 'style="padding-right: 6px;"');
|
$warnpicto = img_warning($langs->trans("WarningMandatorySetupNotComplete"), 'style="padding-right: 6px;"');
|
||||||
print '<br><div class="warning"><a href="'.DOL_URL_ROOT.'/admin/company.php?mainmenu=home'.(empty($setupcompanynotcomplete) ? '' : '&action=edit').'">'.$warnpicto.$langs->trans("WarningMandatorySetupNotComplete").'</a></div>';
|
print '<br><div class="warning"><a href="'.DOL_URL_ROOT.'/admin/company.php?mainmenu=home'.(empty($setupcompanynotcomplete) ? '' : '&action=edit').'">'.$warnpicto.$langs->trans("WarningMandatorySetupNotComplete").'</a></div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
print '</section>';
|
||||||
|
|
||||||
print '<br>';
|
print '<br>';
|
||||||
print '<br>';
|
print '<br>';
|
||||||
print '<br>';
|
|
||||||
print '<br>';
|
print '<section class="setupsection">';
|
||||||
|
|
||||||
// Show info setup module
|
// Show info setup module
|
||||||
print img_picto('', 'cog', 'class="paddingright valignmiddle double"').' '.$langs->trans("SetupDescriptionLink", DOL_URL_ROOT.'/admin/modules.php?mainmenu=home', $langs->transnoentities("Setup"), $langs->transnoentities("Modules"));
|
print img_picto('', 'cog', 'class="paddingright valignmiddle double"').' '.$langs->trans("SetupDescriptionLink", DOL_URL_ROOT.'/admin/modules.php?mainmenu=home', $langs->transnoentities("Setup"), $langs->transnoentities("Modules"));
|
||||||
@ -103,7 +110,9 @@ if (count($conf->modules) <= (empty($conf->global->MAIN_MIN_NB_ENABLED_MODULE_FO
|
|||||||
$warnpicto = img_warning($langs->trans("WarningEnableYourModulesApplications"), 'style="padding-right: 6px;"');
|
$warnpicto = img_warning($langs->trans("WarningEnableYourModulesApplications"), 'style="padding-right: 6px;"');
|
||||||
print '<br><div class="warning"><a href="'.DOL_URL_ROOT.'/admin/modules.php?mainmenu=home">'.$warnpicto.$langs->trans("WarningEnableYourModulesApplications").'</a></div>';
|
print '<br><div class="warning"><a href="'.DOL_URL_ROOT.'/admin/modules.php?mainmenu=home">'.$warnpicto.$langs->trans("WarningEnableYourModulesApplications").'</a></div>';
|
||||||
}
|
}
|
||||||
print '<br>';
|
|
||||||
|
print '</section>';
|
||||||
|
|
||||||
print '<br>';
|
print '<br>';
|
||||||
print '<br>';
|
print '<br>';
|
||||||
print '<br>';
|
print '<br>';
|
||||||
|
|||||||
@ -37,8 +37,9 @@ $langs->loadLangs(array("admin", "knowledgemanagement"));
|
|||||||
// Parameters
|
// Parameters
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$backtopage = GETPOST('backtopage', 'alpha');
|
$backtopage = GETPOST('backtopage', 'alpha');
|
||||||
|
|
||||||
$value = GETPOST('value', 'alpha');
|
$value = GETPOST('value', 'alpha');
|
||||||
|
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||||
|
|
||||||
$label = GETPOST('label', 'alpha');
|
$label = GETPOST('label', 'alpha');
|
||||||
$scandir = GETPOST('scan_dir', 'alpha');
|
$scandir = GETPOST('scan_dir', 'alpha');
|
||||||
$type = 'knowledgemanagement';
|
$type = 'knowledgemanagement';
|
||||||
|
|||||||
@ -246,11 +246,14 @@ if ($reshook == 0) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$permissiontoadd = 1;
|
||||||
|
|
||||||
//asort($elementList);
|
//asort($elementList);
|
||||||
|
|
||||||
$id = 25;
|
$id = 25;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Actions
|
* Actions
|
||||||
*/
|
*/
|
||||||
@ -338,6 +341,7 @@ if (empty($reshook)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setEventMessages($langs->transnoentities("ErrorFieldRequired", $langs->transnoentities($fieldnamekey)), null, 'errors');
|
setEventMessages($langs->transnoentities("ErrorFieldRequired", $langs->transnoentities($fieldnamekey)), null, 'errors');
|
||||||
|
$action = 'add';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -411,6 +415,7 @@ if (empty($reshook)) {
|
|||||||
} else {
|
} else {
|
||||||
dol_print_error($db);
|
dol_print_error($db);
|
||||||
}
|
}
|
||||||
|
$action = 'add';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -489,6 +494,7 @@ if (empty($reshook)) {
|
|||||||
setEventMessages($langs->transnoentities("RecordSaved"), null, 'mesgs');
|
setEventMessages($langs->transnoentities("RecordSaved"), null, 'mesgs');
|
||||||
} else {
|
} else {
|
||||||
setEventMessages($db->error(), null, 'errors');
|
setEventMessages($db->error(), null, 'errors');
|
||||||
|
$action = 'edit';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -515,7 +521,7 @@ if (empty($reshook)) {
|
|||||||
if ($action == $acts[0]) {
|
if ($action == $acts[0]) {
|
||||||
$rowidcol = "rowid";
|
$rowidcol = "rowid";
|
||||||
|
|
||||||
$sql = "UPDATE ".$tabname[$id]." SET active = 1 WHERE ".$rowidcol."=".((int) $rowid);
|
$sql = "UPDATE ".$tabname[$id]." SET active = 1 WHERE rowid = ".((int) $rowid);
|
||||||
|
|
||||||
$result = $db->query($sql);
|
$result = $db->query($sql);
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
@ -527,7 +533,7 @@ if (empty($reshook)) {
|
|||||||
if ($action == $acts[1]) {
|
if ($action == $acts[1]) {
|
||||||
$rowidcol = "rowid";
|
$rowidcol = "rowid";
|
||||||
|
|
||||||
$sql = "UPDATE ".$tabname[$id]." SET active = 0 WHERE ".$rowidcol."=".((int) $rowid);
|
$sql = "UPDATE ".$tabname[$id]." SET active = 0 WHERE rowid = ".((int) $rowid);
|
||||||
|
|
||||||
$result = $db->query($sql);
|
$result = $db->query($sql);
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
@ -545,18 +551,38 @@ $form = new Form($db);
|
|||||||
$formadmin = new FormAdmin($db);
|
$formadmin = new FormAdmin($db);
|
||||||
|
|
||||||
$help_url = '';
|
$help_url = '';
|
||||||
$title = $langs->trans("EMailsSetup");
|
if (!empty($user->admin) && (empty($_SESSION['leftmenu']) || $_SESSION['leftmenu'] != 'email_templates')) {
|
||||||
|
$title = $langs->trans("EMailsSetup");
|
||||||
|
} else {
|
||||||
|
$title = $langs->trans("EMailsTemplates");
|
||||||
|
}
|
||||||
|
|
||||||
llxHeader('', $title, $help_url);
|
llxHeader('', $title, $help_url);
|
||||||
|
|
||||||
$linkback = '';
|
$linkback = '';
|
||||||
$titlepicto = 'title_setup';
|
$titlepicto = 'title_setup';
|
||||||
|
|
||||||
print load_fiche_titre($title, $linkback, $titlepicto);
|
|
||||||
|
|
||||||
$head = email_admin_prepare_head();
|
$url = DOL_URL_ROOT.'/admin/mails_templates.php?action=add';
|
||||||
|
$newcardbutton = dolGetButtonTitle($langs->trans('NewEMailTemplate'), '', 'fa fa-plus-circle', $url, '', $permissiontoadd);
|
||||||
|
|
||||||
|
|
||||||
|
if (!empty($user->admin) && (empty($_SESSION['leftmenu']) || $_SESSION['leftmenu'] != 'email_templates')) {
|
||||||
|
print load_fiche_titre($title, '', $titlepicto);
|
||||||
|
} else {
|
||||||
|
print load_fiche_titre($title, $newcardbutton, $titlepicto);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($user->admin) && (empty($_SESSION['leftmenu']) || $_SESSION['leftmenu'] != 'email_templates')) {
|
||||||
|
$head = email_admin_prepare_head();
|
||||||
|
|
||||||
|
print dol_get_fiche_head($head, 'templates', '', -1);
|
||||||
|
|
||||||
|
if (!empty($user->admin) && (empty($_SESSION['leftmenu']) || $_SESSION['leftmenu'] != 'email_templates')) {
|
||||||
|
print load_fiche_titre('', $newcardbutton, '');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
print dol_get_fiche_head($head, 'templates', '', -1);
|
|
||||||
|
|
||||||
// Confirmation de la suppression de la ligne
|
// Confirmation de la suppression de la ligne
|
||||||
if ($action == 'delete') {
|
if ($action == 'delete') {
|
||||||
@ -599,7 +625,7 @@ $sql .= $db->plimit($listlimit + 1, $offset);
|
|||||||
|
|
||||||
$fieldlist = explode(',', $tabfield[$id]);
|
$fieldlist = explode(',', $tabfield[$id]);
|
||||||
|
|
||||||
if ($action == 'view') {
|
if ($action == 'add') {
|
||||||
// Form to add a new line
|
// Form to add a new line
|
||||||
print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$id.'" method="POST">';
|
print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$id.'" method="POST">';
|
||||||
print '<input type="hidden" name="token" value="'.newToken().'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
@ -750,7 +776,8 @@ if ($action == 'view') {
|
|||||||
if ($tmpfieldlist == 'topic') {
|
if ($tmpfieldlist == 'topic') {
|
||||||
print '<td class="center" rowspan="'.(count($fieldsforcontent)).'">';
|
print '<td class="center" rowspan="'.(count($fieldsforcontent)).'">';
|
||||||
if ($action != 'edit') {
|
if ($action != 'edit') {
|
||||||
print '<input type="submit" class="button button-add" name="actionadd" value="'.$langs->trans("Add").'">';
|
print '<input type="submit" class="button button-add" name="actionadd" value="'.$langs->trans("Add").'"><br>';
|
||||||
|
print '<input type="submit" class="button button-cancel" name="actioncancel" value="'.$langs->trans("Cancel").'">';
|
||||||
}
|
}
|
||||||
print '</td>';
|
print '</td>';
|
||||||
}
|
}
|
||||||
@ -1142,7 +1169,10 @@ print '</div>';
|
|||||||
print '</form>';
|
print '</form>';
|
||||||
|
|
||||||
|
|
||||||
print dol_get_fiche_end();
|
if (!empty($user->admin) && (empty($_SESSION['leftmenu']) || $_SESSION['leftmenu'] != 'email_templates')) {
|
||||||
|
print dol_get_fiche_end();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// End of page
|
// End of page
|
||||||
llxFooter();
|
llxFooter();
|
||||||
|
|||||||
@ -535,11 +535,11 @@ if ($mode == 'common' || $mode == 'commonkanban') {
|
|||||||
|
|
||||||
//$moreforfilter .= '<div class="floatright center marginrightonly hideonsmartphone" style="padding-top: 3px"><span class="paddingright">'.$moreinfo.'</span> '.$moreinfo2.'</div>';
|
//$moreforfilter .= '<div class="floatright center marginrightonly hideonsmartphone" style="padding-top: 3px"><span class="paddingright">'.$moreinfo.'</span> '.$moreinfo2.'</div>';
|
||||||
|
|
||||||
$moreforfilter .= '<div class="colorbacktimesheet float valignmiddle">';
|
$moreforfilter .= '<div class="divfilteralone colorbacktimesheet float valignmiddle">';
|
||||||
$moreforfilter .= '<div class="divsearchfield paddingtop">';
|
$moreforfilter .= '<div class="divsearchfield paddingtop paddingbottom valignmiddle inline-block">';
|
||||||
$moreforfilter .= img_picto($langs->trans("Filter"), 'filter', 'class="paddingright opacityhigh hideonsmartphone"').'<input type="text" id="search_keyword" name="search_keyword" class="maxwidth125" value="'.dol_escape_htmltag($search_keyword).'" placeholder="'.dol_escape_htmltag($langs->trans('Keyword')).'">';
|
$moreforfilter .= img_picto($langs->trans("Filter"), 'filter', 'class="paddingright opacityhigh hideonsmartphone"').'<input type="text" id="search_keyword" name="search_keyword" class="maxwidth125" value="'.dol_escape_htmltag($search_keyword).'" placeholder="'.dol_escape_htmltag($langs->trans('Keyword')).'">';
|
||||||
$moreforfilter .= '</div>';
|
$moreforfilter .= '</div>';
|
||||||
$moreforfilter .= '<div class="divsearchfield paddingtop">';
|
$moreforfilter .= '<div class="divsearchfield paddingtop paddingbottom valignmiddle inline-block">';
|
||||||
$moreforfilter .= $form->selectarray('search_nature', $arrayofnatures, dol_escape_htmltag($search_nature), $langs->trans('Origin'), 0, 0, '', 0, 0, 0, '', 'maxwidth250', 1);
|
$moreforfilter .= $form->selectarray('search_nature', $arrayofnatures, dol_escape_htmltag($search_nature), $langs->trans('Origin'), 0, 0, '', 0, 0, 0, '', 'maxwidth250', 1);
|
||||||
$moreforfilter .= '</div>';
|
$moreforfilter .= '</div>';
|
||||||
if (getDolGlobalInt('MAIN_FEATURES_LEVEL')) {
|
if (getDolGlobalInt('MAIN_FEATURES_LEVEL')) {
|
||||||
@ -553,16 +553,16 @@ if ($mode == 'common' || $mode == 'commonkanban') {
|
|||||||
if ($conf->global->MAIN_FEATURES_LEVEL > 1) {
|
if ($conf->global->MAIN_FEATURES_LEVEL > 1) {
|
||||||
$array_version['development'] = $langs->trans("Development");
|
$array_version['development'] = $langs->trans("Development");
|
||||||
}
|
}
|
||||||
$moreforfilter .= '<div class="divsearchfield paddingtop">';
|
$moreforfilter .= '<div class="divsearchfield paddingtop paddingbottom valignmiddle inline-block">';
|
||||||
$moreforfilter .= $form->selectarray('search_version', $array_version, $search_version, $langs->trans('Version'), 0, 0, '', 0, 0, 0, '', 'maxwidth150', 1);
|
$moreforfilter .= $form->selectarray('search_version', $array_version, $search_version, $langs->trans('Version'), 0, 0, '', 0, 0, 0, '', 'maxwidth150', 1);
|
||||||
$moreforfilter .= '</div>';
|
$moreforfilter .= '</div>';
|
||||||
}
|
}
|
||||||
$moreforfilter .= '<div class="divsearchfield paddingtop">';
|
$moreforfilter .= '<div class="divsearchfield paddingtop paddingbottom valignmiddle inline-block">';
|
||||||
$moreforfilter .= $form->selectarray('search_status', array('active'=>$langs->transnoentitiesnoconv("Enabled"), 'disabled'=>$langs->transnoentitiesnoconv("Disabled")), $search_status, $langs->trans('Status'), 0, 0, '', 0, 0, 0, '', 'maxwidth150', 1);
|
$moreforfilter .= $form->selectarray('search_status', array('active'=>$langs->transnoentitiesnoconv("Enabled"), 'disabled'=>$langs->transnoentitiesnoconv("Disabled")), $search_status, $langs->trans('Status'), 0, 0, '', 0, 0, 0, '', 'maxwidth150', 1);
|
||||||
$moreforfilter .= '</div>';
|
$moreforfilter .= '</div>';
|
||||||
$moreforfilter .= ' ';
|
$moreforfilter .= ' ';
|
||||||
$moreforfilter .= '<div class="divsearchfield">';
|
$moreforfilter .= '<div class="divsearchfield valignmiddle inline-block">';
|
||||||
$moreforfilter .= '<input type="submit" name="buttonsubmit" class="button" value="'.dol_escape_htmltag($langs->trans("Refresh")).'">';
|
$moreforfilter .= '<input type="submit" name="buttonsubmit" class="button small" value="'.dol_escape_htmltag($langs->trans("Refresh")).'">';
|
||||||
if ($search_keyword || ($search_nature && $search_nature != '-1') || ($search_version && $search_version != '-1') || ($search_status && $search_status != '-1')) {
|
if ($search_keyword || ($search_nature && $search_nature != '-1') || ($search_version && $search_version != '-1') || ($search_status && $search_status != '-1')) {
|
||||||
$moreforfilter .= ' ';
|
$moreforfilter .= ' ';
|
||||||
$moreforfilter .= '<input type="submit" name="buttonreset" class="buttonreset noborderbottom" value="'.dol_escape_htmltag($langs->trans("Reset")).'">';
|
$moreforfilter .= '<input type="submit" name="buttonreset" class="buttonreset noborderbottom" value="'.dol_escape_htmltag($langs->trans("Reset")).'">';
|
||||||
@ -1139,7 +1139,7 @@ if ($mode == 'deploy') {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($allowfromweb == 1) {
|
if ($allowfromweb == 1) {
|
||||||
print $langs->trans("UnpackPackageInModulesRoot", $dirins).'<br>';
|
print '<span class="opacitymedium">'.$langs->trans("UnpackPackageInModulesRoot", $dirins).'</span><br>';
|
||||||
|
|
||||||
print '<br>';
|
print '<br>';
|
||||||
|
|
||||||
|
|||||||
@ -37,6 +37,8 @@ if (!$user->admin) {
|
|||||||
|
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$value = GETPOST('value', 'alpha');
|
$value = GETPOST('value', 'alpha');
|
||||||
|
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||||
|
|
||||||
$label = GETPOST('label', 'alpha');
|
$label = GETPOST('label', 'alpha');
|
||||||
$scandir = GETPOST('scan_dir', 'alpha');
|
$scandir = GETPOST('scan_dir', 'alpha');
|
||||||
$type = 'mrp';
|
$type = 'mrp';
|
||||||
|
|||||||
@ -43,6 +43,8 @@ if (!$user->admin) {
|
|||||||
|
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$value = GETPOST('value', 'alpha');
|
$value = GETPOST('value', 'alpha');
|
||||||
|
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||||
|
|
||||||
$label = GETPOST('label', 'alpha');
|
$label = GETPOST('label', 'alpha');
|
||||||
$scandir = GETPOST('scan_dir', 'alpha');
|
$scandir = GETPOST('scan_dir', 'alpha');
|
||||||
$type = 'propal';
|
$type = 'propal';
|
||||||
|
|||||||
@ -36,6 +36,8 @@ if (!$user->admin) {
|
|||||||
|
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$value = GETPOST('value', 'alpha');
|
$value = GETPOST('value', 'alpha');
|
||||||
|
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||||
|
|
||||||
$label = GETPOST('label', 'alpha');
|
$label = GETPOST('label', 'alpha');
|
||||||
$scandir = GETPOST('scan_dir', 'alpha');
|
$scandir = GETPOST('scan_dir', 'alpha');
|
||||||
$type = 'reception';
|
$type = 'reception';
|
||||||
|
|||||||
@ -43,6 +43,8 @@ if (!$user->admin) {
|
|||||||
|
|
||||||
$type = GETPOST('type', 'alpha');
|
$type = GETPOST('type', 'alpha');
|
||||||
$value = GETPOST('value', 'alpha');
|
$value = GETPOST('value', 'alpha');
|
||||||
|
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||||
|
|
||||||
$label = GETPOST('label', 'alpha');
|
$label = GETPOST('label', 'alpha');
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$scandir = GETPOST('scan_dir', 'alpha');
|
$scandir = GETPOST('scan_dir', 'alpha');
|
||||||
|
|||||||
@ -37,6 +37,8 @@ if (!$user->admin) {
|
|||||||
|
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$value = GETPOST('value', 'alpha');
|
$value = GETPOST('value', 'alpha');
|
||||||
|
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||||
|
|
||||||
$label = GETPOST('label', 'alpha');
|
$label = GETPOST('label', 'alpha');
|
||||||
$scandir = GETPOST('scandir', 'alpha');
|
$scandir = GETPOST('scandir', 'alpha');
|
||||||
$type = 'supplier_payment';
|
$type = 'supplier_payment';
|
||||||
|
|||||||
@ -38,6 +38,8 @@ if (!$user->admin) {
|
|||||||
|
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$value = GETPOST('value', 'alpha');
|
$value = GETPOST('value', 'alpha');
|
||||||
|
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||||
|
|
||||||
$label = GETPOST('label', 'alpha');
|
$label = GETPOST('label', 'alpha');
|
||||||
$scandir = GETPOST('scan_dir', 'alpha');
|
$scandir = GETPOST('scan_dir', 'alpha');
|
||||||
$type = 'supplier_proposal';
|
$type = 'supplier_proposal';
|
||||||
|
|||||||
@ -38,6 +38,8 @@ if (!$user->admin) {
|
|||||||
// Parameters
|
// Parameters
|
||||||
$value = GETPOST('value', 'alpha');
|
$value = GETPOST('value', 'alpha');
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
|
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||||
|
|
||||||
$label = GETPOST('label', 'alpha');
|
$label = GETPOST('label', 'alpha');
|
||||||
$scandir = GETPOST('scandir', 'alpha');
|
$scandir = GETPOST('scandir', 'alpha');
|
||||||
$type = 'ticket';
|
$type = 'ticket';
|
||||||
|
|||||||
@ -400,8 +400,6 @@ print '</td>';
|
|||||||
print '</tr>';
|
print '</tr>';
|
||||||
print '</table>';
|
print '</table>';
|
||||||
|
|
||||||
print '</td></tr>';
|
|
||||||
print '</table>';
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -538,6 +536,8 @@ if (!empty($_SESSION["commandbackuptorun"])) {
|
|||||||
|
|
||||||
print "</div> <!-- end div center button -->\n";
|
print "</div> <!-- end div center button -->\n";
|
||||||
|
|
||||||
|
print '</td></tr>';
|
||||||
|
print '</table>';
|
||||||
|
|
||||||
print "</div> <!-- end div fichehalfleft -->\n";
|
print "</div> <!-- end div fichehalfleft -->\n";
|
||||||
|
|
||||||
|
|||||||
@ -137,7 +137,7 @@ $dirtocompress = basename($fulldirtocompress);
|
|||||||
|
|
||||||
if ($compression == 'zip') {
|
if ($compression == 'zip') {
|
||||||
$file .= '.zip';
|
$file .= '.zip';
|
||||||
$excludefiles = '/(\.back|\.old|\.log|[\/\\\]temp[\/\\\]|documents[\/\\\]admin[\/\\\]documents[\/\\\])/i';
|
$excludefiles = '/(\.back|\.old|\.log|\.pdf_preview-.*\.png|[\/\\\]temp[\/\\\]|documents[\/\\\]admin[\/\\\]documents[\/\\\])/i';
|
||||||
|
|
||||||
//var_dump($fulldirtocompress);
|
//var_dump($fulldirtocompress);
|
||||||
//var_dump($outputdir."/".$file);exit;
|
//var_dump($outputdir."/".$file);exit;
|
||||||
@ -173,7 +173,7 @@ if ($compression == 'zip') {
|
|||||||
|
|
||||||
// We also exclude '/temp/' dir and 'documents/admin/documents'
|
// We also exclude '/temp/' dir and 'documents/admin/documents'
|
||||||
// We make escapement here and call executeCLI without escapement because we don't want to have the '*.log' escaped.
|
// We make escapement here and call executeCLI without escapement because we don't want to have the '*.log' escaped.
|
||||||
$cmd = "tar -cf ".escapeshellcmd($outputdir."/".$file)." --exclude-vcs --exclude-caches-all --exclude='temp' --exclude='*.log' --exclude='documents/admin/documents' -C '".escapeshellcmd(dol_sanitizePathName($dirtoswitch))."' '".escapeshellcmd(dol_sanitizeFileName($dirtocompress))."'";
|
$cmd = "tar -cf ".escapeshellcmd($outputdir."/".$file)." --exclude-vcs --exclude-caches-all --exclude='temp' --exclude='*.log' --exclude='*.pdf_preview-*.png' --exclude='documents/admin/documents' -C '".escapeshellcmd(dol_sanitizePathName($dirtoswitch))."' '".escapeshellcmd(dol_sanitizeFileName($dirtocompress))."'";
|
||||||
|
|
||||||
$result = $utils->executeCLI($cmd, $outputfile, 0, null, 1);
|
$result = $utils->executeCLI($cmd, $outputfile, 0, null, 1);
|
||||||
|
|
||||||
|
|||||||
@ -43,9 +43,11 @@ $extrafields = new ExtraFields($db);
|
|||||||
|
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$backtopage = GETPOST('backtopage', 'alpha');
|
$backtopage = GETPOST('backtopage', 'alpha');
|
||||||
|
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||||
|
|
||||||
$value = GETPOST('value', 'alpha');
|
$value = GETPOST('value', 'alpha');
|
||||||
$label = GETPOST('label', 'alpha');
|
$label = GETPOST('label', 'alpha');
|
||||||
|
|
||||||
$scandir = GETPOST('scandir', 'alpha');
|
$scandir = GETPOST('scandir', 'alpha');
|
||||||
$type = 'user';
|
$type = 'user';
|
||||||
|
|
||||||
|
|||||||
@ -42,6 +42,8 @@ $extrafields = new ExtraFields($db);
|
|||||||
|
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$value = GETPOST('value', 'alpha');
|
$value = GETPOST('value', 'alpha');
|
||||||
|
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||||
|
|
||||||
$type = 'group';
|
$type = 'group';
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@ -36,6 +36,7 @@ $langs->loadLangs(array("admin", "workstation"));
|
|||||||
// Parameters
|
// Parameters
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$backtopage = GETPOST('backtopage', 'alpha');
|
$backtopage = GETPOST('backtopage', 'alpha');
|
||||||
|
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||||
|
|
||||||
$value = GETPOST('value', 'alpha');
|
$value = GETPOST('value', 'alpha');
|
||||||
|
|
||||||
|
|||||||
@ -624,6 +624,9 @@ class Documents extends DolibarrApi
|
|||||||
} elseif ($modulepart == 'expensereport') {
|
} elseif ($modulepart == 'expensereport') {
|
||||||
require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php';
|
||||||
$object = new ExpenseReport($this->db);
|
$object = new ExpenseReport($this->db);
|
||||||
|
} elseif ($modulepart == 'fichinter') {
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/fichinter/class/fichinter.class.php';
|
||||||
|
$object = new Fichinter($this->db);
|
||||||
} elseif ($modulepart == 'adherent' || $modulepart == 'member') {
|
} elseif ($modulepart == 'adherent' || $modulepart == 'member') {
|
||||||
$modulepart = 'adherent';
|
$modulepart = 'adherent';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php';
|
||||||
|
|||||||
@ -320,12 +320,12 @@ class BlockedLog
|
|||||||
$this->error++;
|
$this->error++;
|
||||||
}
|
}
|
||||||
} elseif ($this->action == 'MODULE_SET') {
|
} elseif ($this->action == 'MODULE_SET') {
|
||||||
return '<i class="opacitymedium">System to track events into unalterable logs were enabled</i>';
|
return '<i class="opacitymedium">'.$langs->trans("BlockedLogEnabled").'</i>';
|
||||||
} elseif ($this->action == 'MODULE_RESET') {
|
} elseif ($this->action == 'MODULE_RESET') {
|
||||||
if ($this->signature == '0000000000') {
|
if ($this->signature == '0000000000') {
|
||||||
return '<i class="opacitymedium">System to track events into unalterable logs were disabled after some recording were done. We saved a special Fingerprint to track the chain as broken.</i>';
|
return '<i class="opacitymedium">'.$langs->trans("BlockedLogDisabled").'</i>';
|
||||||
} else {
|
} else {
|
||||||
return '<i class="opacitymedium">System to track events into unalterable logs were disabled. This is possible because no record were done yet.</i>';
|
return '<i class="opacitymedium">'.$langs->trans("BlockedLogDisabledBis").'</i>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -148,8 +148,17 @@ if (empty($reshook)) {
|
|||||||
$error = 0;
|
$error = 0;
|
||||||
|
|
||||||
// Set if we used free entry or predefined product
|
// Set if we used free entry or predefined product
|
||||||
$idprod = (int) GETPOST('idprod', 'int');
|
$bom_child_id = (int) GETPOST('bom_id', 'int');
|
||||||
$bom_child = (int) GETPOST('bom_select', 'int');
|
if ($bom_child_id > 0) {
|
||||||
|
$bom_child = new BOM($db);
|
||||||
|
$res = $bom_child->fetch($bom_child_id);
|
||||||
|
if ($res) {
|
||||||
|
$idprod = $bom_child->fk_product;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$idprod = (int) GETPOST('idprod', 'int');
|
||||||
|
}
|
||||||
|
|
||||||
$qty = price2num(GETPOST('qty', 'alpha'), 'MS');
|
$qty = price2num(GETPOST('qty', 'alpha'), 'MS');
|
||||||
$qty_frozen = price2num(GETPOST('qty_frozen', 'alpha'), 'MS');
|
$qty_frozen = price2num(GETPOST('qty_frozen', 'alpha'), 'MS');
|
||||||
$disable_stock_change = GETPOST('disable_stock_change', 'int');
|
$disable_stock_change = GETPOST('disable_stock_change', 'int');
|
||||||
@ -173,7 +182,7 @@ if (empty($reshook)) {
|
|||||||
$bomline = new BOMLine($db);
|
$bomline = new BOMLine($db);
|
||||||
$bomline->fk_bom = $id;
|
$bomline->fk_bom = $id;
|
||||||
$bomline->fk_product = $idprod;
|
$bomline->fk_product = $idprod;
|
||||||
$bomline->fk_bom_child = $bom_child;
|
$bomline->fk_bom_child = $bom_child_id;
|
||||||
$bomline->qty = $qty;
|
$bomline->qty = $qty;
|
||||||
$bomline->qty_frozen = (int) $qty_frozen;
|
$bomline->qty_frozen = (int) $qty_frozen;
|
||||||
$bomline->disable_stock_change = (int) $disable_stock_change;
|
$bomline->disable_stock_change = (int) $disable_stock_change;
|
||||||
@ -354,8 +363,6 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
|||||||
$formquestion = array();
|
$formquestion = array();
|
||||||
if (!empty($conf->bom->enabled)) {
|
if (!empty($conf->bom->enabled)) {
|
||||||
$langs->load("mrp");
|
$langs->load("mrp");
|
||||||
require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php';
|
|
||||||
$formproduct = new FormProduct($db);
|
|
||||||
$forcecombo = 0;
|
$forcecombo = 0;
|
||||||
if ($conf->browser->name == 'ie') {
|
if ($conf->browser->name == 'ie') {
|
||||||
$forcecombo = 1; // There is a bug in IE10 that make combo inside popup crazy
|
$forcecombo = 1; // There is a bug in IE10 that make combo inside popup crazy
|
||||||
@ -384,8 +391,6 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
|||||||
$formquestion = array();
|
$formquestion = array();
|
||||||
if (!empty($conf->bom->enabled)) {
|
if (!empty($conf->bom->enabled)) {
|
||||||
$langs->load("mrp");
|
$langs->load("mrp");
|
||||||
require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php';
|
|
||||||
$formproduct = new FormProduct($db);
|
|
||||||
$forcecombo = 0;
|
$forcecombo = 0;
|
||||||
if ($conf->browser->name == 'ie') {
|
if ($conf->browser->name == 'ie') {
|
||||||
$forcecombo = 1; // There is a bug in IE10 that make combo inside popup crazy
|
$forcecombo = 1; // There is a bug in IE10 that make combo inside popup crazy
|
||||||
@ -415,7 +420,6 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
|||||||
if (!empty($conf->bom->enabled)) {
|
if (!empty($conf->bom->enabled)) {
|
||||||
$langs->load("mrp");
|
$langs->load("mrp");
|
||||||
require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php';
|
||||||
$formproduct = new FormProduct($db);
|
|
||||||
$forcecombo = 0;
|
$forcecombo = 0;
|
||||||
if ($conf->browser->name == 'ie') {
|
if ($conf->browser->name == 'ie') {
|
||||||
$forcecombo = 1; // There is a bug in IE10 that make combo inside popup crazy
|
$forcecombo = 1; // There is a bug in IE10 that make combo inside popup crazy
|
||||||
@ -585,13 +589,14 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
|||||||
$(".collapse_bom").click(function() {
|
$(".collapse_bom").click(function() {
|
||||||
console.log("We click on collapse");
|
console.log("We click on collapse");
|
||||||
var id_bom_line = $(this).attr('id').replace('collapse-', '');
|
var id_bom_line = $(this).attr('id').replace('collapse-', '');
|
||||||
if($(this).text().indexOf('+') > 0) {
|
console.log($(this).html().indexOf('folder-open'));
|
||||||
|
if($(this).html().indexOf('folder-open') <= 0) {
|
||||||
$('[parentid="'+ id_bom_line +'"]').show();
|
$('[parentid="'+ id_bom_line +'"]').show();
|
||||||
$(this).html('(-) ');
|
$(this).html('<?php echo dol_escape_js(img_picto('', 'folder-open')); ?>');
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$('[parentid="'+ id_bom_line +'"]').hide();
|
$('[parentid="'+ id_bom_line +'"]').hide();
|
||||||
$(this).html('(+) ');
|
$(this).html('<?php echo dol_escape_js(img_picto('', 'folder')); ?>');
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -601,7 +606,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
|||||||
$("#show_all").click(function() {
|
$("#show_all").click(function() {
|
||||||
console.log("We click on show all");
|
console.log("We click on show all");
|
||||||
$("[class^=sub_bom_lines]").show();
|
$("[class^=sub_bom_lines]").show();
|
||||||
$("[class^=collapse_bom]").html('(-) ');
|
$("[class^=collapse_bom]").html('<?php echo dol_escape_js(img_picto('', 'folder-open')); ?>');
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -609,7 +614,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
|||||||
$("#hide_all").click(function() {
|
$("#hide_all").click(function() {
|
||||||
console.log("We click on hide all");
|
console.log("We click on hide all");
|
||||||
$("[class^=sub_bom_lines]").hide();
|
$("[class^=sub_bom_lines]").hide();
|
||||||
$("[class^=collapse_bom]").html('(+) ');
|
$("[class^=collapse_bom]").html('<?php echo dol_escape_js(img_picto('', 'folder')); ?>');
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -1064,26 +1064,40 @@ class BOM extends CommonObject
|
|||||||
$tmpproduct->cost_price = 0;
|
$tmpproduct->cost_price = 0;
|
||||||
$tmpproduct->pmp = 0;
|
$tmpproduct->pmp = 0;
|
||||||
|
|
||||||
$result = $tmpproduct->fetch($line->fk_product, '', '', '', 0, 1, 1); // We discard selling price and language loading
|
if (empty($line->fk_bom_child)) {
|
||||||
if ($result < 0) {
|
$result = $tmpproduct->fetch($line->fk_product, '', '', '', 0, 1, 1); // We discard selling price and language loading
|
||||||
$this->error = $tmpproduct->error;
|
if ($result < 0) {
|
||||||
return -1;
|
$this->error = $tmpproduct->error;
|
||||||
}
|
return -1;
|
||||||
$line->unit_cost = price2num((!empty($tmpproduct->cost_price)) ? $tmpproduct->cost_price : $tmpproduct->pmp);
|
}
|
||||||
if (empty($line->unit_cost)) {
|
$line->unit_cost = price2num((!empty($tmpproduct->cost_price)) ? $tmpproduct->cost_price : $tmpproduct->pmp);
|
||||||
if ($productFournisseur->find_min_price_product_fournisseur($line->fk_product) > 0) {
|
if (empty($line->unit_cost)) {
|
||||||
$line->unit_cost = $productFournisseur->fourn_unitprice;
|
if ($productFournisseur->find_min_price_product_fournisseur($line->fk_product) > 0) {
|
||||||
|
$line->unit_cost = $productFournisseur->fourn_unitprice;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$line->total_cost = price2num($line->qty * $line->unit_cost, 'MT');
|
||||||
|
|
||||||
|
$this->total_cost += $line->total_cost;
|
||||||
|
} else {
|
||||||
|
$bom_child= new BOM($this->db);
|
||||||
|
$res = $bom_child->fetch($line->fk_bom_child);
|
||||||
|
if ($res>0) {
|
||||||
|
$bom_child->calculateCosts();
|
||||||
|
$this->total_cost += $bom_child->total_cost;
|
||||||
|
} else {
|
||||||
|
$this->error = $bom_child->error;
|
||||||
|
return -2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$line->total_cost = price2num($line->qty * $line->unit_cost, 'MT');
|
|
||||||
|
|
||||||
$this->total_cost += $line->total_cost;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->total_cost = price2num($this->total_cost, 'MT');
|
$this->total_cost = price2num($this->total_cost, 'MT');
|
||||||
if ($this->qty) {
|
if ($this->qty > 0) {
|
||||||
$this->unit_cost = price2num($this->total_cost / $this->qty, 'MU');
|
$this->unit_cost = price2num($this->total_cost / $this->qty, 'MU');
|
||||||
|
} elseif ($this->qty < 0) {
|
||||||
|
$this->unit_cost = price2num($this->total_cost * $this->qty, 'MU');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -109,7 +109,7 @@ if (!empty($conf->product->enabled) || !empty($conf->service->enabled)) {
|
|||||||
if (!empty($conf->global->BOM_SUB_BOM)) {
|
if (!empty($conf->global->BOM_SUB_BOM)) {
|
||||||
print '<br><span class="opacitymedium">'.$langs->trans("or").'</span><br>'.$langs->trans("BOM");
|
print '<br><span class="opacitymedium">'.$langs->trans("or").'</span><br>'.$langs->trans("BOM");
|
||||||
// TODO Add component to select a BOM
|
// TODO Add component to select a BOM
|
||||||
print '<select id="bom_select" name="bom_select"><option value="-1">TODO</option></select>';
|
$form->select_bom();
|
||||||
}
|
}
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
|
|||||||
@ -41,7 +41,7 @@ if (empty($object) || !is_object($object)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
global $forceall, $senderissupplier, $inputalsopricewithtax, $outputalsopricetotalwithtax;
|
global $forceall, $senderissupplier, $inputalsopricewithtax, $outputalsopricetotalwithtax, $langs;
|
||||||
|
|
||||||
if (empty($dateSelector)) {
|
if (empty($dateSelector)) {
|
||||||
$dateSelector = 0;
|
$dateSelector = 0;
|
||||||
@ -83,8 +83,12 @@ $tmpproduct->fetch($line->fk_product);
|
|||||||
$tmpbom = new BOM($object->db);
|
$tmpbom = new BOM($object->db);
|
||||||
$res = $tmpbom->fetch($line->fk_bom_child);
|
$res = $tmpbom->fetch($line->fk_bom_child);
|
||||||
if ($tmpbom->id > 0) {
|
if ($tmpbom->id > 0) {
|
||||||
|
print $tmpproduct->getNomUrl(1);
|
||||||
|
print ' '.$langs->trans("or").' ';
|
||||||
print $tmpbom->getNomUrl(1);
|
print $tmpbom->getNomUrl(1);
|
||||||
print '<a class="collapse_bom" id="collapse-'.$line->id.'" href="#">' . (empty($conf->global->BOM_SHOW_ALL_BOM_BY_DEFAULT) ? '(+)' : '(-)') . ' </a>';
|
print ' <a class="collapse_bom" id="collapse-'.$line->id.'" href="#">';
|
||||||
|
print (empty($conf->global->BOM_SHOW_ALL_BOM_BY_DEFAULT) ? img_picto('', 'folder') : img_picto('', 'folder-open'));
|
||||||
|
print '</a>';
|
||||||
} else {
|
} else {
|
||||||
print $tmpproduct->getNomUrl(1);
|
print $tmpproduct->getNomUrl(1);
|
||||||
print ' - '.$tmpproduct->label;
|
print ' - '.$tmpproduct->label;
|
||||||
@ -176,7 +180,7 @@ if ($action == 'selectlines') {
|
|||||||
print '</tr>';
|
print '</tr>';
|
||||||
|
|
||||||
// Select of all the sub-BOM lines
|
// Select of all the sub-BOM lines
|
||||||
$sql = 'SELECT rowid, fk_bom_child, fk_product FROM '.MAIN_DB_PREFIX.'bom_bomline AS bl';
|
$sql = 'SELECT rowid, fk_bom_child, fk_product, qty FROM '.MAIN_DB_PREFIX.'bom_bomline AS bl';
|
||||||
$sql.= ' WHERE fk_bom ='. (int) $tmpbom->id;
|
$sql.= ' WHERE fk_bom ='. (int) $tmpbom->id;
|
||||||
$resql = $object->db->query($sql);
|
$resql = $object->db->query($sql);
|
||||||
|
|
||||||
@ -199,21 +203,23 @@ if ($resql) {
|
|||||||
print '<tr class="sub_bom_lines" parentid="'.$line->id.'">';
|
print '<tr class="sub_bom_lines" parentid="'.$line->id.'">';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Product
|
// Product OR BOM
|
||||||
print '<td style="padding-left: 5%" id="sub_bom_product_'.$sub_bom_line->id.'">'.$sub_bom_product->getNomUrl(1).'</td>';
|
print '<td style="padding-left: 5%" id="sub_bom_product_'.$sub_bom_line->id.'">';
|
||||||
|
if (!empty($obj->fk_bom_child)) {
|
||||||
// Sub-BOM
|
print $sub_bom_product->getNomUrl(1);
|
||||||
if ($sub_bom_line->fk_bom_child > 0) {
|
print ' '.$langs->trans('or').' ';
|
||||||
print '<td id="sub_bom_bom_'.$sub_bom_line->id.'">'.$sub_bom->getNomUrl(1).'</td>';
|
print $sub_bom->getNomUrl(1);
|
||||||
} else {
|
} else {
|
||||||
print '<td id="sub_bom_bom_'.$sub_bom_line->id.'"> </td>';
|
print $sub_bom_product->getNomUrl(1);
|
||||||
|
print '</td>';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Qty
|
// Qty
|
||||||
print '<td class="linecolqty nowrap right" id="sub_bom_qty_'.$sub_bom_line->id.'">'.price($sub_bom_line->qty * $line->qty, 0, '', 0, 0).'</td>';
|
|
||||||
if ($sub_bom_line->qty_frozen > 0) {
|
if ($sub_bom_line->qty_frozen > 0) {
|
||||||
print '<td class="linecolqtyfrozen nowrap right" id="sub_bom_qty_frozen_'.$sub_bom_line->id.'">'.$sub_bom_line->qty_frozen.'</td>';
|
print '<td class="linecolqty nowrap right" id="sub_bom_qty_'.$sub_bom_line->id.'">'.price($sub_bom_line->qty, 0, '', 0, 0).'</td>';
|
||||||
|
print '<td class="linecolqtyfrozen nowrap right" id="sub_bom_qty_frozen_'.$sub_bom_line->id.'">'.$langs->trans('Yes').'</td>';
|
||||||
} else {
|
} else {
|
||||||
|
print '<td class="linecolqty nowrap right" id="sub_bom_qty_'.$sub_bom_line->id.'">'.price($sub_bom_line->qty * $line->qty, 0, '', 0, 0).'</td>';
|
||||||
print '<td class="linecolqtyfrozen nowrap right" id="sub_bom_qty_frozen_'.$sub_bom_line->id.'"> </td>';
|
print '<td class="linecolqtyfrozen nowrap right" id="sub_bom_qty_frozen_'.$sub_bom_line->id.'"> </td>';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -230,18 +236,20 @@ if ($resql) {
|
|||||||
// Cost price if it's defined
|
// Cost price if it's defined
|
||||||
if ($sub_bom_product->cost_price > 0) {
|
if ($sub_bom_product->cost_price > 0) {
|
||||||
print '<td class="linecolcost nowrap right" id="sub_bom_cost_'.$sub_bom_line->id.'">'.price($sub_bom_product->cost_price * $line->qty).'</td>';
|
print '<td class="linecolcost nowrap right" id="sub_bom_cost_'.$sub_bom_line->id.'">'.price($sub_bom_product->cost_price * $line->qty).'</td>';
|
||||||
$total_cost.= $sub_bom_product->cost_price * $line->qty;
|
$total_cost+= $sub_bom_product->cost_price * $line->qty;
|
||||||
} elseif ($sub_bom_product->pmp > 0) { // PMP if cost price isn't defined
|
} elseif ($sub_bom_product->pmp > 0) { // PMP if cost price isn't defined
|
||||||
print '<td class="linecolcost nowrap right" id="sub_bom_cost_'.$sub_bom_line->id.'">'.price($sub_bom_product->pmp * $line->qty).'</td>';
|
print '<td class="linecolcost nowrap right" id="sub_bom_cost_'.$sub_bom_line->id.'">'.price($sub_bom_product->pmp * $line->qty).'</td>';
|
||||||
$total_cost.= $sub_bom_product->pmp * $line->qty;
|
$total_cost.= $sub_bom_product->pmp * $line->qty;
|
||||||
} else { // Minimum purchase price if cost price and PMP aren't defined
|
} else { // Minimum purchase price if cost price and PMP aren't defined
|
||||||
$sql_supplier_price = 'SELECT MIN(price) AS min_price FROM '.MAIN_DB_PREFIX.'product_fournisseur_price';
|
$sql_supplier_price = 'SELECT MIN(price) AS min_price, quantity AS qty FROM '.MAIN_DB_PREFIX.'product_fournisseur_price';
|
||||||
$sql_supplier_price.= ' WHERE fk_product = '. (int) $sub_bom_product->id;
|
$sql_supplier_price.= ' WHERE fk_product = '. (int) $sub_bom_product->id;
|
||||||
$resql_supplier_price = $object->db->query($sql_supplier_price);
|
$resql_supplier_price = $object->db->query($sql_supplier_price);
|
||||||
if ($resql_supplier_price) {
|
if ($resql_supplier_price) {
|
||||||
$obj = $object->db->fetch_object($resql_supplier_price);
|
$obj = $object->db->fetch_object($resql_supplier_price);
|
||||||
print '<td class="linecolcost nowrap right" id="sub_bom_cost_'.$sub_bom_line->id.'">'.price($obj->min_price * $line->qty).'</td>';
|
$line_cost = $obj->min_price/$obj->qty * $sub_bom_line->qty;
|
||||||
$total_cost+= $obj->min_price * $line->qty;
|
|
||||||
|
print '<td class="linecolcost nowrap right" id="sub_bom_cost_'.$sub_bom_line->id.'">'.price($line_cost).'</td>';
|
||||||
|
$total_cost+= $line_cost;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -280,7 +280,7 @@ if (empty($reshook) && $action == 'add') {
|
|||||||
if (!$error) {
|
if (!$error) {
|
||||||
// Initialisation objet actioncomm
|
// Initialisation objet actioncomm
|
||||||
$object->priority = GETPOSTISSET("priority") ? GETPOST("priority", "int") : 0;
|
$object->priority = GETPOSTISSET("priority") ? GETPOST("priority", "int") : 0;
|
||||||
$object->fulldayevent = (!empty($fulldayevent) ? 1 : 0);
|
$object->fulldayevent = ($fulldayevent ? 1 : 0);
|
||||||
$object->location = GETPOST("location", 'alphanohtml');
|
$object->location = GETPOST("location", 'alphanohtml');
|
||||||
$object->label = GETPOST('label', 'alphanohtml');
|
$object->label = GETPOST('label', 'alphanohtml');
|
||||||
|
|
||||||
@ -1960,7 +1960,7 @@ if ($id > 0) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Full day event
|
// Full day event
|
||||||
print '<tr><td class="titlefield">'.$langs->trans("EventOnFullDay").'</td><td>'.yn($object->fulldayevent, 3).'</td></tr>';
|
print '<tr><td class="titlefield">'.$langs->trans("EventOnFullDay").'</td><td>'.yn($object->fulldayevent ? 1 : 0, 3).'</td></tr>';
|
||||||
|
|
||||||
$rowspan = 4;
|
$rowspan = 4;
|
||||||
if (empty($conf->global->AGENDA_DISABLE_LOCATION)) {
|
if (empty($conf->global->AGENDA_DISABLE_LOCATION)) {
|
||||||
@ -1969,7 +1969,7 @@ if ($id > 0) {
|
|||||||
|
|
||||||
// Date start
|
// Date start
|
||||||
print '<tr><td>'.$langs->trans("DateActionStart").'</td><td>';
|
print '<tr><td>'.$langs->trans("DateActionStart").'</td><td>';
|
||||||
if (!$object->fulldayevent) {
|
if (empty($object->fulldayevent)) {
|
||||||
print dol_print_date($object->datep, 'dayhour', 'tzuser');
|
print dol_print_date($object->datep, 'dayhour', 'tzuser');
|
||||||
} else {
|
} else {
|
||||||
print dol_print_date($object->datep, 'day', 'tzuser');
|
print dol_print_date($object->datep, 'day', 'tzuser');
|
||||||
@ -1982,7 +1982,7 @@ if ($id > 0) {
|
|||||||
|
|
||||||
// Date end
|
// Date end
|
||||||
print '<tr><td>'.$langs->trans("DateActionEnd").'</td><td>';
|
print '<tr><td>'.$langs->trans("DateActionEnd").'</td><td>';
|
||||||
if (!$object->fulldayevent) {
|
if (empty($object->fulldayevent)) {
|
||||||
print dol_print_date($object->datef, 'dayhour', 'tzuser');
|
print dol_print_date($object->datef, 'dayhour', 'tzuser');
|
||||||
} else {
|
} else {
|
||||||
print dol_print_date($object->datef, 'day', 'tzuser');
|
print dol_print_date($object->datef, 'day', 'tzuser');
|
||||||
|
|||||||
@ -555,7 +555,11 @@ class ActionComm extends CommonObject
|
|||||||
$sql .= (isset($user->id) && $user->id > 0 ? $user->id : "null").", ";
|
$sql .= (isset($user->id) && $user->id > 0 ? $user->id : "null").", ";
|
||||||
$sql .= ($userownerid > 0 ? $userownerid : "null").", ";
|
$sql .= ($userownerid > 0 ? $userownerid : "null").", ";
|
||||||
$sql .= ($userdoneid > 0 ? $userdoneid : "null").", ";
|
$sql .= ($userdoneid > 0 ? $userdoneid : "null").", ";
|
||||||
$sql .= "'".$this->db->escape($this->label)."','".$this->db->escape($this->percentage)."','".$this->db->escape($this->priority)."','".$this->db->escape($this->fulldayevent)."','".$this->db->escape($this->location)."', ";
|
$sql .= "'".$this->db->escape($this->label)."', ";
|
||||||
|
$sql .= "'".$this->db->escape($this->percentage)."', ";
|
||||||
|
$sql .= "'".$this->db->escape($this->priority)."', ";
|
||||||
|
$sql .= "'".$this->db->escape($this->fulldayevent)."', ";
|
||||||
|
$sql .= "'".$this->db->escape($this->location)."', ";
|
||||||
$sql .= "'".$this->db->escape($this->transparency)."', ";
|
$sql .= "'".$this->db->escape($this->transparency)."', ";
|
||||||
$sql .= (!empty($this->fk_element) ? ((int) $this->fk_element) : "null").", ";
|
$sql .= (!empty($this->fk_element) ? ((int) $this->fk_element) : "null").", ";
|
||||||
$sql .= (!empty($this->elementtype) ? "'".$this->db->escape($this->elementtype)."'" : "null").", ";
|
$sql .= (!empty($this->elementtype) ? "'".$this->db->escape($this->elementtype)."'" : "null").", ";
|
||||||
|
|||||||
@ -194,11 +194,11 @@ if ($object->id > 0) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Full day event
|
// Full day event
|
||||||
print '<tr><td class="titlefield">'.$langs->trans("EventOnFullDay").'</td><td colspan="3">'.yn($object->fulldayevent, 3).'</td></tr>';
|
print '<tr><td class="titlefield">'.$langs->trans("EventOnFullDay").'</td><td colspan="3">'.yn($object->fulldayevent ? 1 : 0, 3).'</td></tr>';
|
||||||
|
|
||||||
// Date start
|
// Date start
|
||||||
print '<tr><td>'.$langs->trans("DateActionStart").'</td><td colspan="3">';
|
print '<tr><td>'.$langs->trans("DateActionStart").'</td><td colspan="3">';
|
||||||
if (!$object->fulldayevent) {
|
if (empty($object->fulldayevent)) {
|
||||||
print dol_print_date($object->datep, 'dayhour', 'tzuser');
|
print dol_print_date($object->datep, 'dayhour', 'tzuser');
|
||||||
} else {
|
} else {
|
||||||
print dol_print_date($object->datep, 'day', 'tzuser');
|
print dol_print_date($object->datep, 'day', 'tzuser');
|
||||||
@ -211,7 +211,7 @@ if ($object->id > 0) {
|
|||||||
|
|
||||||
// Date end
|
// Date end
|
||||||
print '<tr><td>'.$langs->trans("DateActionEnd").'</td><td colspan="3">';
|
print '<tr><td>'.$langs->trans("DateActionEnd").'</td><td colspan="3">';
|
||||||
if (!$object->fulldayevent) {
|
if (empty($object->fulldayevent)) {
|
||||||
print dol_print_date($object->datef, 'dayhour', 'tzuser');
|
print dol_print_date($object->datef, 'dayhour', 'tzuser');
|
||||||
} else {
|
} else {
|
||||||
print dol_print_date($object->datef, 'day', 'tzuser');
|
print dol_print_date($object->datef, 'day', 'tzuser');
|
||||||
|
|||||||
@ -310,6 +310,8 @@ if ($object->fetch($id) >= 0) {
|
|||||||
print load_fiche_titre($langs->trans("ToAddRecipientsChooseHere"), ($user->admin ?info_admin($langs->trans("YouCanAddYourOwnPredefindedListHere"), 1) : ''), 'generic');
|
print load_fiche_titre($langs->trans("ToAddRecipientsChooseHere"), ($user->admin ?info_admin($langs->trans("YouCanAddYourOwnPredefindedListHere"), 1) : ''), 'generic');
|
||||||
|
|
||||||
//print '<table class="noborder centpercent">';
|
//print '<table class="noborder centpercent">';
|
||||||
|
|
||||||
|
print '<div class="div-table-responsive">';
|
||||||
print '<div class="tagtable centpercent liste_titre_bydiv borderbottom" id="tablelines">';
|
print '<div class="tagtable centpercent liste_titre_bydiv borderbottom" id="tablelines">';
|
||||||
|
|
||||||
//print '<tr class="liste_titre">';
|
//print '<tr class="liste_titre">';
|
||||||
@ -323,7 +325,7 @@ if ($object->fetch($id) >= 0) {
|
|||||||
//print '<td class="liste_titre" align="center"> </td>';
|
//print '<td class="liste_titre" align="center"> </td>';
|
||||||
print '<div class="tagtd"> </div>';
|
print '<div class="tagtd"> </div>';
|
||||||
//print "</tr>\n";
|
//print "</tr>\n";
|
||||||
print '</div>';
|
print '</div>'; // End tr
|
||||||
|
|
||||||
clearstatcache();
|
clearstatcache();
|
||||||
|
|
||||||
@ -424,9 +426,9 @@ if ($object->fetch($id) >= 0) {
|
|||||||
|
|
||||||
print '<div class="tagtd right">';
|
print '<div class="tagtd right">';
|
||||||
if ($allowaddtarget) {
|
if ($allowaddtarget) {
|
||||||
print '<input type="submit" class="button button-add" name="button_'.$modulename.'" value="'.$langs->trans("Add").'">';
|
print '<input type="submit" class="button button-add small" name="button_'.$modulename.'" value="'.$langs->trans("Add").'">';
|
||||||
} else {
|
} else {
|
||||||
print '<input type="submit" class="button disabled" disabled="disabled" name="button_'.$modulename.'" value="'.$langs->trans("Add").'">';
|
print '<input type="submit" class="button small disabled" disabled="disabled" name="button_'.$modulename.'" value="'.$langs->trans("Add").'">';
|
||||||
//print $langs->trans("MailNoChangePossible");
|
//print $langs->trans("MailNoChangePossible");
|
||||||
print " ";
|
print " ";
|
||||||
}
|
}
|
||||||
@ -445,6 +447,7 @@ if ($object->fetch($id) >= 0) {
|
|||||||
$reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
$reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||||
print $hookmanager->resPrint;
|
print $hookmanager->resPrint;
|
||||||
|
|
||||||
|
print '</div>'; // End table
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
|
||||||
print '<br><br>';
|
print '<br><br>';
|
||||||
@ -535,7 +538,7 @@ if ($object->fetch($id) >= 0) {
|
|||||||
|
|
||||||
$morehtmlcenter = '';
|
$morehtmlcenter = '';
|
||||||
if ($allowaddtarget) {
|
if ($allowaddtarget) {
|
||||||
$morehtmlcenter = '<span class="opacitymedium">'.$langs->trans("ToClearAllRecipientsClickHere").'</span> <a href="'.$_SERVER["PHP_SELF"].'?clearlist=1&id='.$object->id.'" class="button reposition smallpaddingimp">'.$langs->trans("TargetsReset").'</a>';
|
$morehtmlcenter = '<span class="opacitymedium hideonsmartphone">'.$langs->trans("ToClearAllRecipientsClickHere").'</span> <a href="'.$_SERVER["PHP_SELF"].'?clearlist=1&id='.$object->id.'" class="button reposition smallpaddingimp">'.$langs->trans("TargetsReset").'</a>';
|
||||||
}
|
}
|
||||||
$morehtmlcenter .= ' <a class="reposition" href="'.$_SERVER["PHP_SELF"].'?exportcsv=1&id='.$object->id.'">'.$langs->trans("Download").'</a>';
|
$morehtmlcenter .= ' <a class="reposition" href="'.$_SERVER["PHP_SELF"].'?exportcsv=1&id='.$object->id.'">'.$langs->trans("Download").'</a>';
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
/* Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
|
/* Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
|
||||||
* Copyright (C) 2016 Laurent Destailleur <eldy@users.sourceforge.net>
|
* Copyright (C) 2016 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
* Copyright (C) 2020 Thibault FOUCART <support@ptibogxiv.net>
|
* Copyright (C) 2020 Thibault FOUCART <support@ptibogxiv.net>
|
||||||
|
* Copyright (C) 2022 ATM Consulting <contact@atm-consulting.fr>
|
||||||
|
* Copyright (C) 2022 OpenDSI <support@open-dsi.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
|
||||||
* 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
|
||||||
@ -274,14 +276,17 @@ class Proposals extends DolibarrApi
|
|||||||
/**
|
/**
|
||||||
* Get lines of a commercial proposal
|
* Get lines of a commercial proposal
|
||||||
*
|
*
|
||||||
* @param int $id Id of commercial proposal
|
* @param int $id Id of commercial proposal
|
||||||
|
* @param string $sqlfilters Other criteria to filter answers separated by a comma. d is the alias for proposal lines table, p is the alias for product table. "Syntax example "(p.ref:like:'SO-%') and (d.date_start:<:'20220101')"
|
||||||
*
|
*
|
||||||
* @url GET {id}/lines
|
* @url GET {id}/lines
|
||||||
*
|
*
|
||||||
* @return int
|
* @return int
|
||||||
*/
|
*/
|
||||||
public function getLines($id)
|
public function getLines($id, $sqlfilters = '')
|
||||||
{
|
{
|
||||||
|
$filters = "";
|
||||||
|
|
||||||
if (!DolibarrApiAccess::$user->rights->propal->lire) {
|
if (!DolibarrApiAccess::$user->rights->propal->lire) {
|
||||||
throw new RestException(401);
|
throw new RestException(401);
|
||||||
}
|
}
|
||||||
@ -294,7 +299,16 @@ class Proposals extends DolibarrApi
|
|||||||
if (!DolibarrApi::_checkAccessToResource('propal', $this->propal->id)) {
|
if (!DolibarrApi::_checkAccessToResource('propal', $this->propal->id)) {
|
||||||
throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
|
throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
|
||||||
}
|
}
|
||||||
$this->propal->getLinesArray();
|
|
||||||
|
if (!empty($sqlfilters)) {
|
||||||
|
if (!DolibarrApi::_checkFilters($sqlfilters)) {
|
||||||
|
throw new RestException(503, 'Error when validating parameter sqlfilters '.$sqlfilters);
|
||||||
|
}
|
||||||
|
$regexstring = '\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)';
|
||||||
|
$filters = " AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")";
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->propal->getLinesArray($filters);
|
||||||
$result = array();
|
$result = array();
|
||||||
foreach ($this->propal->lines as $line) {
|
foreach ($this->propal->lines as $line) {
|
||||||
array_push($result, $this->_cleanObjectDatas($line));
|
array_push($result, $this->_cleanObjectDatas($line));
|
||||||
@ -308,7 +322,7 @@ class Proposals extends DolibarrApi
|
|||||||
* @param int $id Id of commercial proposal to update
|
* @param int $id Id of commercial proposal to update
|
||||||
* @param array $request_data Commercial proposal line data
|
* @param array $request_data Commercial proposal line data
|
||||||
*
|
*
|
||||||
* @url POST {id}/lines
|
* @url POST {id}/line
|
||||||
*
|
*
|
||||||
* @return int
|
* @return int
|
||||||
*/
|
*/
|
||||||
@ -368,6 +382,84 @@ class Proposals extends DolibarrApi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add lines to given commercial proposal
|
||||||
|
*
|
||||||
|
* @param int $id Id of commercial proposal to update
|
||||||
|
* @param array $request_data Commercial proposal line data
|
||||||
|
*
|
||||||
|
* @url POST {id}/lines
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function postLines($id, $request_data = null)
|
||||||
|
{
|
||||||
|
if (!DolibarrApiAccess::$user->rights->propal->creer) {
|
||||||
|
throw new RestException(401);
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = $this->propal->fetch($id);
|
||||||
|
if (!$result) {
|
||||||
|
throw new RestException(404, 'Commercial Proposal not found');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!DolibarrApi::_checkAccessToResource('propal', $this->propal->id)) {
|
||||||
|
throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
|
||||||
|
}
|
||||||
|
|
||||||
|
$errors = [];
|
||||||
|
$this->db->begin();
|
||||||
|
|
||||||
|
foreach ($request_data as $TData) {
|
||||||
|
if (empty($TData[0])) $TData = array($TData);
|
||||||
|
|
||||||
|
foreach ($TData as $lineData) {
|
||||||
|
$line = (object) $lineData;
|
||||||
|
|
||||||
|
$updateRes = $this->propal->addline(
|
||||||
|
$line->desc,
|
||||||
|
$line->subprice,
|
||||||
|
$line->qty,
|
||||||
|
$line->tva_tx,
|
||||||
|
$line->localtax1_tx,
|
||||||
|
$line->localtax2_tx,
|
||||||
|
$line->fk_product,
|
||||||
|
$line->remise_percent,
|
||||||
|
'HT',
|
||||||
|
0,
|
||||||
|
$line->info_bits,
|
||||||
|
$line->product_type,
|
||||||
|
$line->rang,
|
||||||
|
$line->special_code,
|
||||||
|
$line->fk_parent_line,
|
||||||
|
$line->fk_fournprice,
|
||||||
|
$line->pa_ht,
|
||||||
|
$line->label,
|
||||||
|
$line->date_start,
|
||||||
|
$line->date_end,
|
||||||
|
$line->array_options,
|
||||||
|
$line->fk_unit,
|
||||||
|
$line->origin,
|
||||||
|
$line->origin_id,
|
||||||
|
$line->multicurrency_subprice,
|
||||||
|
$line->fk_remise_except
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($updateRes < 0) {
|
||||||
|
$errors['lineLabel'] = $line->label;
|
||||||
|
$errors['msg'] = $this->propal->errors;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (empty($errors)) {
|
||||||
|
$this->db->commit();
|
||||||
|
return count($request_data);
|
||||||
|
} else {
|
||||||
|
$this->db->rollback();
|
||||||
|
throw new RestException(400, implode(", ", $errors));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update a line of given commercial proposal
|
* Update a line of given commercial proposal
|
||||||
*
|
*
|
||||||
|
|||||||
@ -1,20 +1,22 @@
|
|||||||
<?php
|
<?php
|
||||||
/* Copyright (C) 2002-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
/* Copyright (C) 2002-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||||
* Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com>
|
* Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com>
|
||||||
* Copyright (C) 2004-2011 Laurent Destailleur <eldy@users.sourceforge.net>
|
* Copyright (C) 2004-2011 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
* Copyright (C) 2005 Marc Barilley <marc@ocebo.com>
|
* Copyright (C) 2005 Marc Barilley <marc@ocebo.com>
|
||||||
* Copyright (C) 2005-2013 Regis Houssin <regis.houssin@inodbox.com>
|
* Copyright (C) 2005-2013 Regis Houssin <regis.houssin@inodbox.com>
|
||||||
* Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr>
|
* Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr>
|
||||||
* Copyright (C) 2008 Raphael Bertrand <raphael.bertrand@resultic.fr>
|
* Copyright (C) 2008 Raphael Bertrand <raphael.bertrand@resultic.fr>
|
||||||
* Copyright (C) 2010-2020 Juanjo Menent <jmenent@2byte.es>
|
* Copyright (C) 2010-2020 Juanjo Menent <jmenent@2byte.es>
|
||||||
* Copyright (C) 2010-2017 Philippe Grand <philippe.grand@atoo-net.com>
|
* Copyright (C) 2010-2017 Philippe Grand <philippe.grand@atoo-net.com>
|
||||||
* Copyright (C) 2012-2014 Christophe Battarel <christophe.battarel@altairis.fr>
|
* Copyright (C) 2012-2014 Christophe Battarel <christophe.battarel@altairis.fr>
|
||||||
* Copyright (C) 2012 Cedric Salvador <csalvador@gpcsolutions.fr>
|
* Copyright (C) 2012 Cedric Salvador <csalvador@gpcsolutions.fr>
|
||||||
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
|
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
|
||||||
* Copyright (C) 2014-2015 Marcos García <marcosgdf@gmail.com>
|
* Copyright (C) 2014-2015 Marcos García <marcosgdf@gmail.com>
|
||||||
* Copyright (C) 2018 Nicolas ZABOURI <info@inovea-conseil.com>
|
* Copyright (C) 2018 Nicolas ZABOURI <info@inovea-conseil.com>
|
||||||
* Copyright (C) 2018-2021 Frédéric France <frederic.france@netlogic.fr>
|
* Copyright (C) 2018-2021 Frédéric France <frederic.france@netlogic.fr>
|
||||||
* Copyright (C) 2018 Ferran Marcet <fmarcet@2byte.es>
|
* Copyright (C) 2018 Ferran Marcet <fmarcet@2byte.es>
|
||||||
|
* Copyright (C) 2022 ATM Consulting <contact@atm-consulting.fr>
|
||||||
|
* Copyright (C) 2022 OpenDSI <support@open-dsi.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
|
||||||
* 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
|
||||||
@ -1714,12 +1716,13 @@ class Propal extends CommonObject
|
|||||||
/**
|
/**
|
||||||
* Load array lines
|
* Load array lines
|
||||||
*
|
*
|
||||||
* @param int $only_product Return only physical products
|
* @param int $only_product Return only physical products
|
||||||
* @param int $loadalsotranslation Return translation for products
|
* @param int $loadalsotranslation Return translation for products
|
||||||
|
* @param string $filters Filter on other fields
|
||||||
*
|
*
|
||||||
* @return int <0 if KO, >0 if OK
|
* @return int <0 if KO, >0 if OK
|
||||||
*/
|
*/
|
||||||
public function fetch_lines($only_product = 0, $loadalsotranslation = 0)
|
public function fetch_lines($only_product = 0, $loadalsotranslation = 0, $filters = '')
|
||||||
{
|
{
|
||||||
global $langs, $conf;
|
global $langs, $conf;
|
||||||
// phpcs:enable
|
// phpcs:enable
|
||||||
@ -1738,6 +1741,9 @@ class Propal extends CommonObject
|
|||||||
if ($only_product) {
|
if ($only_product) {
|
||||||
$sql .= ' AND p.fk_product_type = 0';
|
$sql .= ' AND p.fk_product_type = 0';
|
||||||
}
|
}
|
||||||
|
if ($filters) {
|
||||||
|
$sql .= $filters;
|
||||||
|
}
|
||||||
$sql .= ' ORDER by d.rang';
|
$sql .= ' ORDER by d.rang';
|
||||||
|
|
||||||
dol_syslog(get_class($this)."::fetch_lines", LOG_DEBUG);
|
dol_syslog(get_class($this)."::fetch_lines", LOG_DEBUG);
|
||||||
@ -3689,12 +3695,13 @@ class Propal extends CommonObject
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve an array of proposal lines
|
* Retrieve an array of proposal lines
|
||||||
|
* @param string $filters Filter on other fields
|
||||||
*
|
*
|
||||||
* @return int >0 if OK, <0 if KO
|
* @return int >0 if OK, <0 if KO
|
||||||
*/
|
*/
|
||||||
public function getLinesArray()
|
public function getLinesArray($filters = '')
|
||||||
{
|
{
|
||||||
return $this->fetch_lines();
|
return $this->fetch_lines(0, 0, $filters);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -261,6 +261,11 @@ class Commande extends CommonOrder
|
|||||||
//! key of pos source ('0', '1', ...)
|
//! key of pos source ('0', '1', ...)
|
||||||
public $pos_source;
|
public $pos_source;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array Array with line of all shipments
|
||||||
|
*/
|
||||||
|
public $expeditions;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* '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')
|
* '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')
|
||||||
@ -490,7 +495,8 @@ class Commande extends CommonOrder
|
|||||||
$sql .= " SET ref = '".$this->db->escape($num)."',";
|
$sql .= " SET ref = '".$this->db->escape($num)."',";
|
||||||
$sql .= " fk_statut = ".self::STATUS_VALIDATED.",";
|
$sql .= " fk_statut = ".self::STATUS_VALIDATED.",";
|
||||||
$sql .= " date_valid='".$this->db->idate($now)."',";
|
$sql .= " date_valid='".$this->db->idate($now)."',";
|
||||||
$sql .= " fk_user_valid = ".((int) $user->id);
|
$sql .= " fk_user_valid = ".((int) $user->id).",";
|
||||||
|
$sql .= " fk_user_modif = ".((int) $user->id);
|
||||||
$sql .= " WHERE rowid = ".((int) $this->id);
|
$sql .= " WHERE rowid = ".((int) $this->id);
|
||||||
|
|
||||||
dol_syslog(get_class($this)."::valid", LOG_DEBUG);
|
dol_syslog(get_class($this)."::valid", LOG_DEBUG);
|
||||||
@ -620,7 +626,8 @@ class Commande extends CommonOrder
|
|||||||
$this->db->begin();
|
$this->db->begin();
|
||||||
|
|
||||||
$sql = "UPDATE ".MAIN_DB_PREFIX."commande";
|
$sql = "UPDATE ".MAIN_DB_PREFIX."commande";
|
||||||
$sql .= " SET fk_statut = ".self::STATUS_DRAFT;
|
$sql .= " SET fk_statut = ".self::STATUS_DRAFT.",";
|
||||||
|
$sql .= " fk_user_modif = ".((int) $user->id);
|
||||||
$sql .= " WHERE rowid = ".((int) $this->id);
|
$sql .= " WHERE rowid = ".((int) $this->id);
|
||||||
|
|
||||||
if ($this->db->query($sql)) {
|
if ($this->db->query($sql)) {
|
||||||
@ -694,7 +701,8 @@ class Commande extends CommonOrder
|
|||||||
$this->db->begin();
|
$this->db->begin();
|
||||||
|
|
||||||
$sql = 'UPDATE '.MAIN_DB_PREFIX.'commande';
|
$sql = 'UPDATE '.MAIN_DB_PREFIX.'commande';
|
||||||
$sql .= ' SET fk_statut='.self::STATUS_VALIDATED.', facture=0';
|
$sql .= ' SET fk_statut='.self::STATUS_VALIDATED.', facture=0,';
|
||||||
|
$sql .= " fk_user_modif = ".((int) $user->id);
|
||||||
$sql .= " WHERE rowid = ".((int) $this->id);
|
$sql .= " WHERE rowid = ".((int) $this->id);
|
||||||
|
|
||||||
dol_syslog(get_class($this)."::set_reopen", LOG_DEBUG);
|
dol_syslog(get_class($this)."::set_reopen", LOG_DEBUG);
|
||||||
@ -755,7 +763,8 @@ class Commande extends CommonOrder
|
|||||||
$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
|
$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
|
||||||
$sql .= ' SET fk_statut = '.self::STATUS_CLOSED.',';
|
$sql .= ' SET fk_statut = '.self::STATUS_CLOSED.',';
|
||||||
$sql .= ' fk_user_cloture = '.((int) $user->id).',';
|
$sql .= ' fk_user_cloture = '.((int) $user->id).',';
|
||||||
$sql .= " date_cloture = '".$this->db->idate($now)."'";
|
$sql .= " date_cloture = '".$this->db->idate($now)."',";
|
||||||
|
$sql .= " fk_user_modif = ".((int) $user->id);
|
||||||
$sql .= " WHERE rowid = ".((int) $this->id).' AND fk_statut > '.self::STATUS_DRAFT;
|
$sql .= " WHERE rowid = ".((int) $this->id).' AND fk_statut > '.self::STATUS_DRAFT;
|
||||||
|
|
||||||
if ($this->db->query($sql)) {
|
if ($this->db->query($sql)) {
|
||||||
@ -803,7 +812,8 @@ class Commande extends CommonOrder
|
|||||||
$this->db->begin();
|
$this->db->begin();
|
||||||
|
|
||||||
$sql = "UPDATE ".MAIN_DB_PREFIX."commande";
|
$sql = "UPDATE ".MAIN_DB_PREFIX."commande";
|
||||||
$sql .= " SET fk_statut = ".self::STATUS_CANCELED;
|
$sql .= " SET fk_statut = ".self::STATUS_CANCELED.",";
|
||||||
|
$sql .= " fk_user_modif = ".((int) $user->id);
|
||||||
$sql .= " WHERE rowid = ".((int) $this->id);
|
$sql .= " WHERE rowid = ".((int) $this->id);
|
||||||
$sql .= " AND fk_statut = ".self::STATUS_VALIDATED;
|
$sql .= " AND fk_statut = ".self::STATUS_VALIDATED;
|
||||||
|
|
||||||
@ -1779,7 +1789,7 @@ class Commande extends CommonOrder
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
$sql = 'SELECT c.rowid, c.entity, c.date_creation, c.ref, c.fk_soc, c.fk_user_author, c.fk_user_valid, c.fk_statut';
|
$sql = 'SELECT c.rowid, c.entity, c.date_creation, c.ref, c.fk_soc, c.fk_user_author, c.fk_user_valid, c.fk_user_modif, c.fk_statut';
|
||||||
$sql .= ', c.amount_ht, c.total_ht, c.total_ttc, c.total_tva, c.localtax1 as total_localtax1, c.localtax2 as total_localtax2, c.fk_cond_reglement, c.fk_mode_reglement, c.fk_availability, c.fk_input_reason';
|
$sql .= ', c.amount_ht, c.total_ht, c.total_ttc, c.total_tva, c.localtax1 as total_localtax1, c.localtax2 as total_localtax2, c.fk_cond_reglement, c.fk_mode_reglement, c.fk_availability, c.fk_input_reason';
|
||||||
$sql .= ', c.fk_account';
|
$sql .= ', c.fk_account';
|
||||||
$sql .= ', c.date_commande, c.date_valid, c.tms';
|
$sql .= ', c.date_commande, c.date_valid, c.tms';
|
||||||
@ -1844,6 +1854,7 @@ class Commande extends CommonOrder
|
|||||||
|
|
||||||
$this->user_author_id = $obj->fk_user_author;
|
$this->user_author_id = $obj->fk_user_author;
|
||||||
$this->user_valid = $obj->fk_user_valid;
|
$this->user_valid = $obj->fk_user_valid;
|
||||||
|
$this->user_modification = $obj->fk_user_modif;
|
||||||
$this->total_ht = $obj->total_ht;
|
$this->total_ht = $obj->total_ht;
|
||||||
$this->total_tva = $obj->total_tva;
|
$this->total_tva = $obj->total_tva;
|
||||||
$this->total_localtax1 = $obj->total_localtax1;
|
$this->total_localtax1 = $obj->total_localtax1;
|
||||||
@ -2004,9 +2015,9 @@ class Commande extends CommonOrder
|
|||||||
/**
|
/**
|
||||||
* Load array lines
|
* Load array lines
|
||||||
*
|
*
|
||||||
* @param int $only_product Return only physical products, not services
|
* @param int $only_product Return only physical products, not services
|
||||||
* @param int $loadalsotranslation Return translation for products
|
* @param int $loadalsotranslation Return translation for products
|
||||||
* @return int <0 if KO, >0 if OK
|
* @return int <0 if KO, >0 if OK
|
||||||
*/
|
*/
|
||||||
public function fetch_lines($only_product = 0, $loadalsotranslation = 0)
|
public function fetch_lines($only_product = 0, $loadalsotranslation = 0)
|
||||||
{
|
{
|
||||||
@ -2201,9 +2212,10 @@ class Commande extends CommonOrder
|
|||||||
* Note: For a dedicated shipment, the fetch_lines can be used to load the qty_asked and qty_shipped. This function is use to return qty_shipped cumulated for the order
|
* Note: For a dedicated shipment, the fetch_lines can be used to load the qty_asked and qty_shipped. This function is use to return qty_shipped cumulated for the order
|
||||||
*
|
*
|
||||||
* @param int $filtre_statut Filter on shipment status
|
* @param int $filtre_statut Filter on shipment status
|
||||||
|
* @param int $fk_product Add a filter on a product
|
||||||
* @return int <0 if KO, Nb of lines found if OK
|
* @return int <0 if KO, Nb of lines found if OK
|
||||||
*/
|
*/
|
||||||
public function loadExpeditions($filtre_statut = -1)
|
public function loadExpeditions($filtre_statut = -1, $fk_product = 0)
|
||||||
{
|
{
|
||||||
$this->expeditions = array();
|
$this->expeditions = array();
|
||||||
|
|
||||||
|
|||||||
@ -1462,11 +1462,6 @@ if ($resql) {
|
|||||||
print '<td class="nowraponall">';
|
print '<td class="nowraponall">';
|
||||||
print $generic_commande->getNomUrl(1, ($search_status != 2 ? 0 : $obj->fk_statut), 0, 0, 0, 1, 1);
|
print $generic_commande->getNomUrl(1, ($search_status != 2 ? 0 : $obj->fk_statut), 0, 0, 0, 1, 1);
|
||||||
|
|
||||||
// Warning late icon and note
|
|
||||||
if ($generic_commande->hasDelay()) {
|
|
||||||
print img_picto($langs->trans("Late").' : '.$generic_commande->showDelay(), "warning");
|
|
||||||
}
|
|
||||||
|
|
||||||
$filename = dol_sanitizeFileName($obj->ref);
|
$filename = dol_sanitizeFileName($obj->ref);
|
||||||
$filedir = $conf->commande->multidir_output[$conf->entity].'/'.dol_sanitizeFileName($obj->ref);
|
$filedir = $conf->commande->multidir_output[$conf->entity].'/'.dol_sanitizeFileName($obj->ref);
|
||||||
$urlsource = $_SERVER['PHP_SELF'].'?id='.$obj->rowid;
|
$urlsource = $_SERVER['PHP_SELF'].'?id='.$obj->rowid;
|
||||||
@ -1590,6 +1585,10 @@ if ($resql) {
|
|||||||
if (!empty($arrayfields['c.date_commande']['checked'])) {
|
if (!empty($arrayfields['c.date_commande']['checked'])) {
|
||||||
print '<td class="center">';
|
print '<td class="center">';
|
||||||
print dol_print_date($db->jdate($obj->date_commande), 'day');
|
print dol_print_date($db->jdate($obj->date_commande), 'day');
|
||||||
|
// Warning late icon and note
|
||||||
|
if ($generic_commande->hasDelay()) {
|
||||||
|
print img_picto($langs->trans("Late").' : '.$generic_commande->showDelay(), "warning");
|
||||||
|
}
|
||||||
print '</td>';
|
print '</td>';
|
||||||
if (!$i) {
|
if (!$i) {
|
||||||
$totalarray['nbfield']++;
|
$totalarray['nbfield']++;
|
||||||
@ -1854,10 +1853,13 @@ if ($resql) {
|
|||||||
print '<td class="center">';
|
print '<td class="center">';
|
||||||
if (!empty($show_shippable_command) && !empty($conf->stock->enabled)) {
|
if (!empty($show_shippable_command) && !empty($conf->stock->enabled)) {
|
||||||
if (($obj->fk_statut > $generic_commande::STATUS_DRAFT) && ($obj->fk_statut < $generic_commande::STATUS_CLOSED)) {
|
if (($obj->fk_statut > $generic_commande::STATUS_DRAFT) && ($obj->fk_statut < $generic_commande::STATUS_CLOSED)) {
|
||||||
$generic_commande->getLinesArray(); // This set ->lines
|
$generic_commande->getLinesArray(); // Load array ->lines
|
||||||
|
$generic_commande->loadExpeditions(); // Load array ->expeditions
|
||||||
|
|
||||||
$numlines = count($generic_commande->lines); // Loop on each line of order
|
$numlines = count($generic_commande->lines); // Loop on each line of order
|
||||||
for ($lig = 0; $lig < $numlines; $lig++) {
|
for ($lig = 0; $lig < $numlines; $lig++) {
|
||||||
|
$reliquat = $generic_commande->lines[$lig]->qty - $generic_commande->expeditions[$generic_commande->lines[$lig]->id];
|
||||||
|
|
||||||
if ($generic_commande->lines[$lig]->product_type == 0 && $generic_commande->lines[$lig]->fk_product > 0) { // If line is a product and not a service
|
if ($generic_commande->lines[$lig]->product_type == 0 && $generic_commande->lines[$lig]->fk_product > 0) { // If line is a product and not a service
|
||||||
$nbprod++; // order contains real products
|
$nbprod++; // order contains real products
|
||||||
$generic_product->id = $generic_commande->lines[$lig]->fk_product;
|
$generic_product->id = $generic_commande->lines[$lig]->fk_product;
|
||||||
@ -1872,15 +1874,15 @@ if ($resql) {
|
|||||||
$generic_product->stock_theorique = $productstat_cachevirtual[$generic_commande->lines[$lig]->fk_product]['stock_reel'] = $generic_product->stock_theorique;
|
$generic_product->stock_theorique = $productstat_cachevirtual[$generic_commande->lines[$lig]->fk_product]['stock_reel'] = $generic_product->stock_theorique;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($reliquat > $generic_product->stock_reel) {
|
||||||
|
$notshippable++;
|
||||||
|
}
|
||||||
if (empty($conf->global->SHIPPABLE_ORDER_ICON_IN_LIST)) { // Default code. Default should be this case.
|
if (empty($conf->global->SHIPPABLE_ORDER_ICON_IN_LIST)) { // Default code. Default should be this case.
|
||||||
$text_info .= $generic_commande->lines[$lig]->qty.' X '.$generic_commande->lines[$lig]->product_ref.' '.dol_trunc($generic_commande->lines[$lig]->product_label, 25);
|
$text_info .= $reliquat.' x '.$generic_commande->lines[$lig]->product_ref.' '.dol_trunc($generic_commande->lines[$lig]->product_label, 20);
|
||||||
$text_info .= ' - '.$langs->trans("Stock").': <span class="'.($generic_product->stock_reel > 0 ? 'ok' : 'error').'">'.$generic_product->stock_reel.'</span>';
|
$text_info .= ' - '.$langs->trans("Stock").': <span class="'.($generic_product->stock_reel > 0 ? 'ok' : 'error').'">'.$generic_product->stock_reel.'</span>';
|
||||||
$text_info .= ' - '.$langs->trans("VirtualStock").': <span class="'.($generic_product->stock_theorique > 0 ? 'ok' : 'error').'">'.$generic_product->stock_theorique.'</span>';
|
$text_info .= ' - '.$langs->trans("VirtualStock").': <span class="'.($generic_product->stock_theorique > 0 ? 'ok' : 'error').'">'.$generic_product->stock_theorique.'</span>';
|
||||||
|
$text_info .= ($reliquat != $generic_commande->lines[$lig]->qty ? ' <span class="opacitymedium">('.$langs->trans("QtyInOtherShipments").' '.($generic_commande->lines[$lig]->qty - $reliquat).')</span>' : '');
|
||||||
$text_info .= '<br>';
|
$text_info .= '<br>';
|
||||||
|
|
||||||
if ($generic_commande->lines[$lig]->qty > $generic_product->stock_reel) {
|
|
||||||
$notshippable++;
|
|
||||||
}
|
|
||||||
} else { // BUGGED CODE.
|
} else { // BUGGED CODE.
|
||||||
// DOES NOT TAKE INTO ACCOUNT MANUFACTURING. THIS CODE SHOULD BE USELESS. PREVIOUS CODE SEEMS COMPLETE.
|
// DOES NOT TAKE INTO ACCOUNT MANUFACTURING. THIS CODE SHOULD BE USELESS. PREVIOUS CODE SEEMS COMPLETE.
|
||||||
// COUNT STOCK WHEN WE SHOULD ALREADY HAVE VALUE
|
// COUNT STOCK WHEN WE SHOULD ALREADY HAVE VALUE
|
||||||
@ -1908,32 +1910,31 @@ if ($resql) {
|
|||||||
$stock_order_supplier = $generic_product->stats_commande_fournisseur['qty'];
|
$stock_order_supplier = $generic_product->stats_commande_fournisseur['qty'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$text_info .= $generic_commande->lines[$lig]->qty.' X '.$generic_commande->lines[$lig]->ref.' '.dol_trunc($generic_commande->lines[$lig]->product_label, 25);
|
$text_info .= $reliquat.' x '.$generic_commande->lines[$lig]->ref.' '.dol_trunc($generic_commande->lines[$lig]->product_label, 20);
|
||||||
$text_stock_reel = $generic_product->stock_reel.'/'.$stock_order;
|
$text_stock_reel = $generic_product->stock_reel.'/'.$stock_order;
|
||||||
if ($stock_order > $generic_product->stock_reel && !($generic_product->stock_reel < $generic_commande->lines[$lig]->qty)) {
|
if ($stock_order > $generic_product->stock_reel && !($generic_product->stock_reel < $generic_commande->lines[$lig]->qty)) {
|
||||||
$warning++;
|
$warning++;
|
||||||
$text_warning .= '<span class="warning">'.$langs->trans('Available').' : '.$text_stock_reel.'</span>';
|
$text_warning .= '<span class="warning">'.$langs->trans('Available').' : '.$text_stock_reel.'</span>';
|
||||||
}
|
}
|
||||||
if ($generic_product->stock_reel < $generic_commande->lines[$lig]->qty) {
|
if ($reliquat > $generic_product->stock_reel) {
|
||||||
$notshippable++;
|
|
||||||
$text_info .= '<span class="warning">'.$langs->trans('Available').' : '.$text_stock_reel.'</span>';
|
$text_info .= '<span class="warning">'.$langs->trans('Available').' : '.$text_stock_reel.'</span>';
|
||||||
} else {
|
} else {
|
||||||
$text_info .= '<span class="ok">'.$langs->trans('Available').' : '.$text_stock_reel.'</span>';
|
$text_info .= '<span class="ok">'.$langs->trans('Available').' : '.$text_stock_reel.'</span>';
|
||||||
}
|
}
|
||||||
if ((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) || !empty($conf->supplier_order->enabled)) {
|
if ((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) || !empty($conf->supplier_order->enabled)) {
|
||||||
$text_info .= ' '.$langs->trans('SupplierOrder').' : '.$stock_order_supplier.'<br>';
|
$text_info .= ' '.$langs->trans('SupplierOrder').' : '.$stock_order_supplier;
|
||||||
} else {
|
|
||||||
$text_info .= '<br>';
|
|
||||||
}
|
}
|
||||||
|
$text_info .= ($reliquat != $generic_commande->lines[$lig]->qty ? ' <span class="opacitymedium">('.$langs->trans("QtyInOtherShipments").' '.($generic_commande->lines[$lig]->qty - $reliquat).')</span>' : '');
|
||||||
|
$text_info .= '<br>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($notshippable == 0) {
|
if ($notshippable == 0) {
|
||||||
$text_icon = img_picto('', 'dolly', '', false, 0, 0, '', 'green paddingleft');
|
$text_icon = img_picto('', 'dolly', '', false, 0, 0, '', 'green paddingleft');
|
||||||
$text_info = $langs->trans('Shippable').'<br>'.$text_info;
|
$text_info = $text_icon.' '.$langs->trans('Shippable').'<br>'.$text_info;
|
||||||
} else {
|
} else {
|
||||||
$text_icon = img_picto('', 'dolly', '', false, 0, 0, '', 'error paddingleft');
|
$text_icon = img_picto('', 'dolly', '', false, 0, 0, '', 'error paddingleft');
|
||||||
$text_info = $langs->trans('NonShippable').'<br>'.$text_info;
|
$text_info = $text_icon.' '.$langs->trans('NonShippable').'<br>'.$text_info;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1339,14 +1339,15 @@ if ($resql) {
|
|||||||
$labeltoshow = $langs->trans($reg[1]);
|
$labeltoshow = $langs->trans($reg[1]);
|
||||||
} else {
|
} else {
|
||||||
if ($objp->label == '(payment_salary)') {
|
if ($objp->label == '(payment_salary)') {
|
||||||
$labeltoshow = dol_trunc($langs->trans("SalaryPayment", 40));
|
$labeltoshow = $langs->trans("SalaryPayment");
|
||||||
} else {
|
} else {
|
||||||
$labeltoshow = dol_escape_htmltag($objp->label);
|
$labeltoshow = dol_escape_htmltag($objp->label);
|
||||||
$titletoshow = $objp->label;
|
$titletoshow = $objp->label;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
print '<td class="tdoverflowmax300"'.($titletoshow ? ' title="'.dol_escape_htmltag($titletoshow).'"' : '').'>';
|
|
||||||
print $labeltoshow; // Already escaped
|
|
||||||
|
print '<td class="tdoverflowmax250"'.($titletoshow ? ' title="'.dol_escape_htmltag($titletoshow).'"' : '').'>';
|
||||||
|
|
||||||
// Add info about links after description
|
// Add info about links after description
|
||||||
$cachebankaccount = array();
|
$cachebankaccount = array();
|
||||||
@ -1355,70 +1356,70 @@ if ($resql) {
|
|||||||
if ($links[$key]['type'] == 'withdraw') {
|
if ($links[$key]['type'] == 'withdraw') {
|
||||||
$banktransferstatic->id = $links[$key]['url_id'];
|
$banktransferstatic->id = $links[$key]['url_id'];
|
||||||
$banktransferstatic->ref = $links[$key]['label'];
|
$banktransferstatic->ref = $links[$key]['label'];
|
||||||
print ' '.$banktransferstatic->getNomUrl(0);
|
print $banktransferstatic->getNomUrl(0).' ';
|
||||||
} elseif ($links[$key]['type'] == 'payment') {
|
} elseif ($links[$key]['type'] == 'payment') {
|
||||||
$paymentstatic->id = $links[$key]['url_id'];
|
$paymentstatic->id = $links[$key]['url_id'];
|
||||||
$paymentstatic->ref = $links[$key]['url_id']; // FIXME This is id, not ref of payment
|
$paymentstatic->ref = $links[$key]['url_id']; // FIXME This is id, not ref of payment
|
||||||
$paymentstatic->date = $db->jdate($objp->do);
|
$paymentstatic->date = $db->jdate($objp->do);
|
||||||
print ' '.$paymentstatic->getNomUrl(2);
|
print $paymentstatic->getNomUrl(2).' ';
|
||||||
} elseif ($links[$key]['type'] == 'payment_supplier') {
|
} elseif ($links[$key]['type'] == 'payment_supplier') {
|
||||||
$paymentsupplierstatic->id = $links[$key]['url_id'];
|
$paymentsupplierstatic->id = $links[$key]['url_id'];
|
||||||
$paymentsupplierstatic->ref = $links[$key]['url_id']; // FIXME This is id, not ref of payment
|
$paymentsupplierstatic->ref = $links[$key]['url_id']; // FIXME This is id, not ref of payment
|
||||||
print ' '.$paymentsupplierstatic->getNomUrl(2);
|
print $paymentsupplierstatic->getNomUrl(2).' ';
|
||||||
} elseif ($links[$key]['type'] == 'payment_sc') {
|
} elseif ($links[$key]['type'] == 'payment_sc') {
|
||||||
$paymentscstatic->id = $links[$key]['url_id'];
|
$paymentscstatic->id = $links[$key]['url_id'];
|
||||||
$paymentscstatic->ref = $links[$key]['url_id'];
|
$paymentscstatic->ref = $links[$key]['url_id'];
|
||||||
$paymentscstatic->label = $links[$key]['label'];
|
$paymentscstatic->label = $links[$key]['label'];
|
||||||
print ' '.$paymentscstatic->getNomUrl(2);
|
print $paymentscstatic->getNomUrl(2).' ';
|
||||||
} elseif ($links[$key]['type'] == 'payment_vat') {
|
} elseif ($links[$key]['type'] == 'payment_vat') {
|
||||||
$paymentvatstatic->id = $links[$key]['url_id'];
|
$paymentvatstatic->id = $links[$key]['url_id'];
|
||||||
$paymentvatstatic->ref = $links[$key]['url_id'];
|
$paymentvatstatic->ref = $links[$key]['url_id'];
|
||||||
print ' '.$paymentvatstatic->getNomUrl(2);
|
print $paymentvatstatic->getNomUrl(2).' ';
|
||||||
} elseif ($links[$key]['type'] == 'payment_salary') {
|
} elseif ($links[$key]['type'] == 'payment_salary') {
|
||||||
$paymentsalstatic->id = $links[$key]['url_id'];
|
$paymentsalstatic->id = $links[$key]['url_id'];
|
||||||
$paymentsalstatic->ref = $links[$key]['url_id'];
|
$paymentsalstatic->ref = $links[$key]['url_id'];
|
||||||
$paymentsalstatic->label = $links[$key]['label'];
|
$paymentsalstatic->label = $links[$key]['label'];
|
||||||
print ' '.$paymentsalstatic->getNomUrl(2);
|
print $paymentsalstatic->getNomUrl(2).' ';
|
||||||
} elseif ($links[$key]['type'] == 'payment_loan') {
|
} elseif ($links[$key]['type'] == 'payment_loan') {
|
||||||
print '<a href="'.DOL_URL_ROOT.'/loan/payment/card.php?id='.$links[$key]['url_id'].'">';
|
print '<a href="'.DOL_URL_ROOT.'/loan/payment/card.php?id='.$links[$key]['url_id'].'">';
|
||||||
print ' '.img_object($langs->trans('ShowPayment'), 'payment').' ';
|
print ' '.img_object($langs->trans('ShowPayment'), 'payment').' ';
|
||||||
print '</a>';
|
print '</a> ';
|
||||||
} elseif ($links[$key]['type'] == 'payment_donation') {
|
} elseif ($links[$key]['type'] == 'payment_donation') {
|
||||||
$paymentdonationstatic->id = $links[$key]['url_id'];
|
$paymentdonationstatic->id = $links[$key]['url_id'];
|
||||||
$paymentdonationstatic->ref = $links[$key]['url_id'];
|
$paymentdonationstatic->ref = $links[$key]['url_id'];
|
||||||
print ' '.$paymentdonationstatic->getNomUrl(2);
|
print $paymentdonationstatic->getNomUrl(2).' ';
|
||||||
} elseif ($links[$key]['type'] == 'payment_expensereport') {
|
} elseif ($links[$key]['type'] == 'payment_expensereport') {
|
||||||
$paymentexpensereportstatic->id = $links[$key]['url_id'];
|
$paymentexpensereportstatic->id = $links[$key]['url_id'];
|
||||||
$paymentexpensereportstatic->ref = $links[$key]['url_id'];
|
$paymentexpensereportstatic->ref = $links[$key]['url_id'];
|
||||||
print ' '.$paymentexpensereportstatic->getNomUrl(2);
|
print $paymentexpensereportstatic->getNomUrl(2).' ';
|
||||||
} elseif ($links[$key]['type'] == 'payment_various') {
|
} elseif ($links[$key]['type'] == 'payment_various') {
|
||||||
$paymentvariousstatic->id = $links[$key]['url_id'];
|
$paymentvariousstatic->id = $links[$key]['url_id'];
|
||||||
$paymentvariousstatic->ref = $links[$key]['url_id'];
|
$paymentvariousstatic->ref = $links[$key]['url_id'];
|
||||||
print ' '.$paymentvariousstatic->getNomUrl(2);
|
print $paymentvariousstatic->getNomUrl(2).' ';
|
||||||
} elseif ($links[$key]['type'] == 'banktransfert') {
|
} elseif ($links[$key]['type'] == 'banktransfert') {
|
||||||
// Do not show link to transfer since there is no transfer card (avoid confusion). Can already be accessed from transaction detail.
|
// Do not show link to transfer since there is no transfer card (avoid confusion). Can already be accessed from transaction detail.
|
||||||
if ($objp->amount > 0) {
|
if ($objp->amount > 0) {
|
||||||
$banklinestatic->fetch($links[$key]['url_id']);
|
$banklinestatic->fetch($links[$key]['url_id']);
|
||||||
$bankstatic->id = $banklinestatic->fk_account;
|
$bankstatic->id = $banklinestatic->fk_account;
|
||||||
$bankstatic->label = $banklinestatic->bank_account_ref;
|
$bankstatic->label = $banklinestatic->bank_account_ref;
|
||||||
print ' ('.$langs->trans("TransferFrom").' ';
|
print $langs->trans("TransferFrom").' ';
|
||||||
print $bankstatic->getNomUrl(1, 'transactions');
|
print $bankstatic->getNomUrl(1, 'transactions');
|
||||||
print ' '.$langs->trans("toward").' ';
|
print ' '.$langs->trans("toward").' ';
|
||||||
$bankstatic->id = $objp->bankid;
|
$bankstatic->id = $objp->bankid;
|
||||||
$bankstatic->label = $objp->bankref;
|
$bankstatic->label = $objp->bankref;
|
||||||
print $bankstatic->getNomUrl(1, '');
|
print $bankstatic->getNomUrl(1, '');
|
||||||
print ')';
|
print ' - ';
|
||||||
} else {
|
} else {
|
||||||
$bankstatic->id = $objp->bankid;
|
$bankstatic->id = $objp->bankid;
|
||||||
$bankstatic->label = $objp->bankref;
|
$bankstatic->label = $objp->bankref;
|
||||||
print ' ('.$langs->trans("TransferFrom").' ';
|
print $langs->trans("TransferFrom").' ';
|
||||||
print $bankstatic->getNomUrl(1, '');
|
print $bankstatic->getNomUrl(1, '');
|
||||||
print ' '.$langs->trans("toward").' ';
|
print ' '.$langs->trans("toward").' ';
|
||||||
$banklinestatic->fetch($links[$key]['url_id']);
|
$banklinestatic->fetch($links[$key]['url_id']);
|
||||||
$bankstatic->id = $banklinestatic->fk_account;
|
$bankstatic->id = $banklinestatic->fk_account;
|
||||||
$bankstatic->label = $banklinestatic->bank_account_ref;
|
$bankstatic->label = $banklinestatic->bank_account_ref;
|
||||||
print $bankstatic->getNomUrl(1, 'transactions');
|
print $bankstatic->getNomUrl(1, 'transactions');
|
||||||
print ')';
|
print ' - ';
|
||||||
}
|
}
|
||||||
//var_dump($links);
|
//var_dump($links);
|
||||||
} elseif ($links[$key]['type'] == 'company') {
|
} elseif ($links[$key]['type'] == 'company') {
|
||||||
@ -1430,22 +1431,22 @@ if ($resql) {
|
|||||||
// Information is already shown using the payment_salary link. No need of this link.
|
// Information is already shown using the payment_salary link. No need of this link.
|
||||||
} else {
|
} else {
|
||||||
// Show link with label $links[$key]['label']
|
// Show link with label $links[$key]['label']
|
||||||
if (!empty($objp->label) && !empty($links[$key]['label'])) {
|
|
||||||
print ' - ';
|
|
||||||
}
|
|
||||||
print '<a href="'.$links[$key]['url'].$links[$key]['url_id'].'">';
|
print '<a href="'.$links[$key]['url'].$links[$key]['url_id'].'">';
|
||||||
if (preg_match('/^\((.*)\)$/i', $links[$key]['label'], $reg)) {
|
if (preg_match('/^\((.*)\)$/i', $links[$key]['label'], $reg)) {
|
||||||
// Label generique car entre parentheses. On l'affiche en le traduisant
|
// Label generique car entre parentheses. On l'affiche en le traduisant
|
||||||
if ($reg[1] == 'paiement') {
|
if ($reg[1] == 'paiement') {
|
||||||
$reg[1] = 'Payment';
|
$reg[1] = 'Payment';
|
||||||
}
|
}
|
||||||
print ' '.$langs->trans($reg[1]);
|
print $langs->trans($reg[1]);
|
||||||
} else {
|
} else {
|
||||||
print ' '.$links[$key]['label'];
|
print $links[$key]['label'];
|
||||||
}
|
}
|
||||||
print '</a>';
|
print '</a>'.($labeltoshow ? ' - ' : '');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
print $labeltoshow; // Already escaped
|
||||||
|
|
||||||
print '</td>';
|
print '</td>';
|
||||||
if (!$i) {
|
if (!$i) {
|
||||||
$totalarray['nbfield']++;
|
$totalarray['nbfield']++;
|
||||||
@ -1488,7 +1489,7 @@ if ($resql) {
|
|||||||
|
|
||||||
// Payment type
|
// Payment type
|
||||||
if (!empty($arrayfields['type']['checked'])) {
|
if (!empty($arrayfields['type']['checked'])) {
|
||||||
print '<td align="center" class="nowrap">';
|
print '<td class="tdoverflowmax100 center">';
|
||||||
$labeltype = ($langs->trans("PaymentTypeShort".$objp->fk_type) != "PaymentTypeShort".$objp->fk_type) ? $langs->trans("PaymentTypeShort".$objp->fk_type) : $langs->getLabelFromKey($db, $objp->fk_type, 'c_paiement', 'code', 'libelle', '', 1);
|
$labeltype = ($langs->trans("PaymentTypeShort".$objp->fk_type) != "PaymentTypeShort".$objp->fk_type) ? $langs->trans("PaymentTypeShort".$objp->fk_type) : $langs->getLabelFromKey($db, $objp->fk_type, 'c_paiement', 'code', 'libelle', '', 1);
|
||||||
if ($labeltype == 'SOLD') {
|
if ($labeltype == 'SOLD') {
|
||||||
print ' '; //$langs->trans("InitialBankBalance");
|
print ' '; //$langs->trans("InitialBankBalance");
|
||||||
@ -1514,9 +1515,9 @@ if ($resql) {
|
|||||||
print '<td class="tdoverflowmax150">';
|
print '<td class="tdoverflowmax150">';
|
||||||
|
|
||||||
$companylinked_id = 0;
|
$companylinked_id = 0;
|
||||||
$userlinked_id = 0;
|
$userlinked_id = 0;
|
||||||
|
|
||||||
//payment line type to define user display and user or company linked
|
//payment line type to define user display and user or company linked
|
||||||
foreach ($links as $key => $value) {
|
foreach ($links as $key => $value) {
|
||||||
if ($links[$key]['type'] == 'payment_sc') {
|
if ($links[$key]['type'] == 'payment_sc') {
|
||||||
$type_link = 'payment_sc';
|
$type_link = 'payment_sc';
|
||||||
|
|||||||
@ -1354,6 +1354,7 @@ if ($action == 'create') {
|
|||||||
$dateexample = $object->date_when;
|
$dateexample = $object->date_when;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Help of substitution key
|
||||||
$substitutionarray = getCommonSubstitutionArray($langs, 2, null, $object);
|
$substitutionarray = getCommonSubstitutionArray($langs, 2, null, $object);
|
||||||
|
|
||||||
$substitutionarray['__INVOICE_PREVIOUS_MONTH__'] = $langs->trans("PreviousMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($dateexample, -1, 'm'), '%m').')';
|
$substitutionarray['__INVOICE_PREVIOUS_MONTH__'] = $langs->trans("PreviousMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($dateexample, -1, 'm'), '%m').')';
|
||||||
|
|||||||
@ -130,6 +130,7 @@ $usercanread = $user->rights->facture->lire;
|
|||||||
$usercancreate = $user->rights->facture->creer;
|
$usercancreate = $user->rights->facture->creer;
|
||||||
$usercanissuepayment = $user->rights->facture->paiement;
|
$usercanissuepayment = $user->rights->facture->paiement;
|
||||||
$usercandelete = $user->rights->facture->supprimer;
|
$usercandelete = $user->rights->facture->supprimer;
|
||||||
|
$usercancreatecontract = $user->rights->contrat->creer;
|
||||||
$usercanvalidate = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && $usercancreate) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->facture->invoice_advance->validate)));
|
$usercanvalidate = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && $usercancreate) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->facture->invoice_advance->validate)));
|
||||||
$usercansend = (empty($conf->global->MAIN_USE_ADVANCED_PERMS) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->facture->invoice_advance->send)));
|
$usercansend = (empty($conf->global->MAIN_USE_ADVANCED_PERMS) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->facture->invoice_advance->send)));
|
||||||
$usercanreopen = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && $usercancreate) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->facture->invoice_advance->reopen)));
|
$usercanreopen = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && $usercancreate) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->facture->invoice_advance->reopen)));
|
||||||
@ -609,7 +610,7 @@ if (empty($reshook)) {
|
|||||||
// Check parameters
|
// Check parameters
|
||||||
|
|
||||||
// Check for mandatory fields in thirdparty (defined into setup)
|
// Check for mandatory fields in thirdparty (defined into setup)
|
||||||
$array_to_check = array('IDPROF1', 'IDPROF2', 'IDPROF3', 'IDPROF4', 'IDPROF5', 'IDPROF6', 'EMAIL');
|
$array_to_check = array('IDPROF1', 'IDPROF2', 'IDPROF3', 'IDPROF4', 'IDPROF5', 'IDPROF6', 'EMAIL', 'ACCOUNTANCY_CODE_CUSTOMER');
|
||||||
foreach ($array_to_check as $key) {
|
foreach ($array_to_check as $key) {
|
||||||
$keymin = strtolower($key);
|
$keymin = strtolower($key);
|
||||||
$i = (int) preg_replace('/[^0-9]/', '', $key);
|
$i = (int) preg_replace('/[^0-9]/', '', $key);
|
||||||
@ -637,6 +638,14 @@ if (empty($reshook)) {
|
|||||||
setEventMessages($langs->trans("ErrorBadEMail", $object->thirdparty->email).' ('.$langs->trans("ForbiddenBySetupRules").')', null, 'errors');
|
setEventMessages($langs->trans("ErrorBadEMail", $object->thirdparty->email).' ('.$langs->trans("ForbiddenBySetupRules").')', null, 'errors');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if ($key == 'ACCOUNTANCY_CODE_CUSTOMER') {
|
||||||
|
// Check for mandatory
|
||||||
|
if (!empty($conf->global->SOCIETE_ACCOUNTANCY_CODE_CUSTOMER_INVOICE_MANDATORY) && empty($object->thirdparty->code_compta)) {
|
||||||
|
$langs->load("errors");
|
||||||
|
$error++;
|
||||||
|
setEventMessages($langs->trans("ErrorAccountancyCodeCustomerIsMandatory", $object->thirdparty->name).' ('.$langs->trans("ForbiddenBySetupRules").')', null, 'errors');
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1126,6 +1135,8 @@ if (empty($reshook)) {
|
|||||||
$facture_source->fetchPreviousNextSituationInvoice();
|
$facture_source->fetchPreviousNextSituationInvoice();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$id = $object->create($user);
|
$id = $object->create($user);
|
||||||
if ($id < 0) {
|
if ($id < 0) {
|
||||||
$error++;
|
$error++;
|
||||||
@ -1253,6 +1264,7 @@ if (empty($reshook)) {
|
|||||||
$line->multicurrency_total_tva = -$line->multicurrency_total_tva;
|
$line->multicurrency_total_tva = -$line->multicurrency_total_tva;
|
||||||
$line->multicurrency_total_ttc = -$line->multicurrency_total_ttc;
|
$line->multicurrency_total_ttc = -$line->multicurrency_total_ttc;
|
||||||
|
|
||||||
|
$line->context['createcreditnotefrominvoice'] = 1;
|
||||||
$result = $line->insert(0, 1); // When creating credit note with same lines than source, we must ignore error if discount alreayd linked
|
$result = $line->insert(0, 1); // When creating credit note with same lines than source, we must ignore error if discount alreayd linked
|
||||||
|
|
||||||
$object->lines[] = $line; // insert new line in current object
|
$object->lines[] = $line; // insert new line in current object
|
||||||
@ -3417,6 +3429,10 @@ if ($action == 'create') {
|
|||||||
$optionsav .= '<option value="'.$key.'"';
|
$optionsav .= '<option value="'.$key.'"';
|
||||||
if ($key == GETPOST('fac_avoir')) {
|
if ($key == GETPOST('fac_avoir')) {
|
||||||
$optionsav .= ' selected';
|
$optionsav .= ' selected';
|
||||||
|
|
||||||
|
// pre-filled extra fields with selected credit note
|
||||||
|
$newinvoice_static->fetch_optionals($key);
|
||||||
|
$object->array_options = $newinvoice_static->array_options;
|
||||||
}
|
}
|
||||||
$optionsav .= '>';
|
$optionsav .= '>';
|
||||||
$optionsav .= $newinvoice_static->ref;
|
$optionsav .= $newinvoice_static->ref;
|
||||||
@ -5378,6 +5394,17 @@ if ($action == 'create') {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create contract
|
||||||
|
if (!empty($conf->global->CONTRACT_CREATE_FROM_INVOICE)) {
|
||||||
|
if ($conf->contrat->enabled && $object->statut == Facture::STATUS_VALIDATED) {
|
||||||
|
$langs->load("contracts");
|
||||||
|
|
||||||
|
if ($usercancreatecontract) {
|
||||||
|
print '<a class="butAction" href="' . DOL_URL_ROOT . '/contrat/card.php?action=create&origin=' . $object->element . '&originid=' . $object->id . '&socid=' . $object->socid . '">' . $langs->trans('AddContract') . '</a>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Validate
|
// Validate
|
||||||
if ($object->statut == Facture::STATUS_DRAFT && count($object->lines) > 0 && ((($object->type == Facture::TYPE_STANDARD || $object->type == Facture::TYPE_REPLACEMENT || $object->type == Facture::TYPE_DEPOSIT || $object->type == Facture::TYPE_PROFORMA || $object->type == Facture::TYPE_SITUATION) && (!empty($conf->global->FACTURE_ENABLE_NEGATIVE) || $object->total_ttc >= 0)) || ($object->type == Facture::TYPE_CREDIT_NOTE && $object->total_ttc <= 0))) {
|
if ($object->statut == Facture::STATUS_DRAFT && count($object->lines) > 0 && ((($object->type == Facture::TYPE_STANDARD || $object->type == Facture::TYPE_REPLACEMENT || $object->type == Facture::TYPE_DEPOSIT || $object->type == Facture::TYPE_PROFORMA || $object->type == Facture::TYPE_SITUATION) && (!empty($conf->global->FACTURE_ENABLE_NEGATIVE) || $object->total_ttc >= 0)) || ($object->type == Facture::TYPE_CREDIT_NOTE && $object->total_ttc <= 0))) {
|
||||||
if ($usercanvalidate) {
|
if ($usercanvalidate) {
|
||||||
|
|||||||
@ -1622,7 +1622,7 @@ class Facture extends CommonInvoice
|
|||||||
if ($rowid) {
|
if ($rowid) {
|
||||||
$sql .= " WHERE f.rowid=".((int) $rowid);
|
$sql .= " WHERE f.rowid=".((int) $rowid);
|
||||||
} else {
|
} else {
|
||||||
$sql .= ' WHERE f.entity IN ('.getEntity('invoice').')'; // Dont't use entity if you use rowid
|
$sql .= ' WHERE f.entity IN ('.getEntity('invoice').')'; // Don't use entity if you use rowid
|
||||||
if ($ref) {
|
if ($ref) {
|
||||||
$sql .= " AND f.ref='".$this->db->escape($ref)."'";
|
$sql .= " AND f.ref='".$this->db->escape($ref)."'";
|
||||||
}
|
}
|
||||||
|
|||||||
@ -43,9 +43,8 @@ if (isset($user->socid) && $user->socid > 0) {
|
|||||||
$max = $conf->global->MAIN_SIZE_SHORTLIST_LIMIT;
|
$max = $conf->global->MAIN_SIZE_SHORTLIST_LIMIT;
|
||||||
|
|
||||||
// Maximum elements of the tables
|
// Maximum elements of the tables
|
||||||
$maxDraftCount = empty($conf->global->MAIN_MAXLIST_OVERLOAD) ? 500 : $conf->global->MAIN_MAXLIST_OVERLOAD;
|
$maxDraftCount = empty($conf->global->MAIN_MAXLIST_OVERLOAD) ? $max : $conf->global->MAIN_MAXLIST_OVERLOAD;
|
||||||
$maxLatestEditCount = 5;
|
$maxOpenCount = empty($conf->global->MAIN_MAXLIST_OVERLOAD) ? $max : $conf->global->MAIN_MAXLIST_OVERLOAD;
|
||||||
$maxOpenCount = empty($conf->global->MAIN_MAXLIST_OVERLOAD) ? 500 : $conf->global->MAIN_MAXLIST_OVERLOAD;
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -64,7 +63,7 @@ if ($tmp) {
|
|||||||
print $tmp;
|
print $tmp;
|
||||||
print '<br>';
|
print '<br>';
|
||||||
}
|
}
|
||||||
$tmp = getCustomerInvoiceDraftTable($max, $socid);
|
$tmp = getCustomerInvoiceDraftTable($maxDraftCount, $socid);
|
||||||
if ($tmp) {
|
if ($tmp) {
|
||||||
print $tmp;
|
print $tmp;
|
||||||
print '<br>';
|
print '<br>';
|
||||||
@ -74,13 +73,13 @@ print '</div>';
|
|||||||
|
|
||||||
print '<div class="fichetwothirdright">';
|
print '<div class="fichetwothirdright">';
|
||||||
|
|
||||||
$tmp = getCustomerInvoiceLatestEditTable($maxLatestEditCount, $socid);
|
$tmp = getCustomerInvoiceLatestEditTable($max, $socid);
|
||||||
if ($tmp) {
|
if ($tmp) {
|
||||||
print $tmp;
|
print $tmp;
|
||||||
print '<br>';
|
print '<br>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$tmp = getCustomerInvoiceUnpaidOpenTable($max, $socid);
|
$tmp = getCustomerInvoiceUnpaidOpenTable($maxOpenCount, $socid);
|
||||||
if ($tmp) {
|
if ($tmp) {
|
||||||
print $tmp;
|
print $tmp;
|
||||||
print '<br>';
|
print '<br>';
|
||||||
|
|||||||
@ -210,11 +210,11 @@ if (!empty($conf->facture->enabled) && !empty($user->rights->facture->lire)) {
|
|||||||
print '<td class="nobordernopadding nowraponall">';
|
print '<td class="nobordernopadding nowraponall">';
|
||||||
print $tmpinvoice->getNomUrl(1, '');
|
print $tmpinvoice->getNomUrl(1, '');
|
||||||
print '</td>';
|
print '</td>';
|
||||||
print '<td width="20" class="nobordernopadding nowrap">';
|
|
||||||
if ($tmpinvoice->hasDelay()) {
|
if ($tmpinvoice->hasDelay()) {
|
||||||
|
print '<td width="20" class="nobordernopadding nowrap">';
|
||||||
print img_warning($langs->trans("Late"));
|
print img_warning($langs->trans("Late"));
|
||||||
|
print '</td>';
|
||||||
}
|
}
|
||||||
print '</td>';
|
|
||||||
print '<td width="16" class="nobordernopadding hideonsmartphone right">';
|
print '<td width="16" class="nobordernopadding hideonsmartphone right">';
|
||||||
$filename = dol_sanitizeFileName($obj->ref);
|
$filename = dol_sanitizeFileName($obj->ref);
|
||||||
$filedir = $conf->facture->dir_output.'/'.dol_sanitizeFileName($obj->ref);
|
$filedir = $conf->facture->dir_output.'/'.dol_sanitizeFileName($obj->ref);
|
||||||
|
|||||||
@ -62,6 +62,9 @@ $label = GETPOST('label', 'alpha');
|
|||||||
$actioncode = GETPOST('actioncode');
|
$actioncode = GETPOST('actioncode');
|
||||||
$fk_user = GETPOST('userid', 'int');
|
$fk_user = GETPOST('userid', 'int');
|
||||||
|
|
||||||
|
// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
|
||||||
|
$hookmanager->initHooks(array('taxcard', 'globalcard'));
|
||||||
|
|
||||||
// Initialize technical objects
|
// Initialize technical objects
|
||||||
$object = new ChargeSociales($db);
|
$object = new ChargeSociales($db);
|
||||||
$extrafields = new ExtraFields($db);
|
$extrafields = new ExtraFields($db);
|
||||||
@ -97,7 +100,7 @@ $result = restrictedArea($user, 'tax', $object->id, 'chargesociales', 'charges')
|
|||||||
* Actions
|
* Actions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$parameters = array();
|
$parameters = array('socid' => $socid);
|
||||||
$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');
|
||||||
@ -446,6 +449,8 @@ if ($id > 0) {
|
|||||||
$object = new ChargeSociales($db);
|
$object = new ChargeSociales($db);
|
||||||
$result = $object->fetch($id);
|
$result = $object->fetch($id);
|
||||||
|
|
||||||
|
$formconfirm = '';
|
||||||
|
|
||||||
if ($result > 0) {
|
if ($result > 0) {
|
||||||
$head = tax_prepare_head($object);
|
$head = tax_prepare_head($object);
|
||||||
|
|
||||||
@ -464,25 +469,36 @@ if ($id > 0) {
|
|||||||
$formquestion[] = array('type' => 'text', 'name' => 'amount', 'label' => $langs->trans("Amount"), 'value' => price($object->amount), 'morecss' => 'width100');
|
$formquestion[] = array('type' => 'text', 'name' => 'amount', 'label' => $langs->trans("Amount"), 'value' => price($object->amount), 'morecss' => 'width100');
|
||||||
}
|
}
|
||||||
|
|
||||||
print $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneTax', $object->ref), 'confirm_clone', $formquestion, 'yes', 1, 280);
|
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneTax', $object->ref), 'confirm_clone', $formquestion, 'yes', 1, 280);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if ($action == 'paid') {
|
if ($action == 'paid') {
|
||||||
$text = $langs->trans('ConfirmPaySocialContribution');
|
$text = $langs->trans('ConfirmPaySocialContribution');
|
||||||
print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id, $langs->trans('PaySocialContribution'), $text, "confirm_paid", '', '', 2);
|
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id, $langs->trans('PaySocialContribution'), $text, "confirm_paid", '', '', 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Confirmation of the removal of the Social Contribution
|
// Confirmation of the removal of the Social Contribution
|
||||||
if ($action == 'delete') {
|
if ($action == 'delete') {
|
||||||
$text = $langs->trans('ConfirmDeleteSocialContribution');
|
$text = $langs->trans('ConfirmDeleteSocialContribution');
|
||||||
print $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id, $langs->trans('DeleteSocialContribution'), $text, 'confirm_delete', '', '', 2);
|
$formconfirm = $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id, $langs->trans('DeleteSocialContribution'), $text, 'confirm_delete', '', '', 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($action == 'edit') {
|
if ($action == 'edit') {
|
||||||
print "<form name=\"charge\" action=\"".$_SERVER["PHP_SELF"]."?id=$object->id&action=update\" method=\"post\">";
|
print "<form name=\"charge\" action=\"".$_SERVER["PHP_SELF"]."?id=$object->id&action=update\" method=\"post\">";
|
||||||
print '<input type="hidden" name="token" value="'.newToken().'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
}
|
}
|
||||||
|
// Call Hook formConfirm
|
||||||
|
$parameters = array('formConfirm' => $formconfirm, 'lineid' => $lineid);
|
||||||
|
$reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||||
|
if (empty($reshook)) {
|
||||||
|
$formconfirm .= $hookmanager->resPrint;
|
||||||
|
} elseif ($reshook > 0) {
|
||||||
|
$formconfirm = $hookmanager->resPrint;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Print form confirm
|
||||||
|
print $formconfirm;
|
||||||
|
|
||||||
print dol_get_fiche_head($head, 'card', $langs->trans("SocialContribution"), -1, 'bill');
|
print dol_get_fiche_head($head, 'card', $langs->trans("SocialContribution"), -1, 'bill');
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
* Copyright (C) 2014 Ferran Marcet <fmarcet@2byte.es>
|
* Copyright (C) 2014 Ferran Marcet <fmarcet@2byte.es>
|
||||||
* Copyright (C) 2018-2021 Frédéric France <frederic.france@netlogic.fr>
|
* Copyright (C) 2018-2021 Frédéric France <frederic.france@netlogic.fr>
|
||||||
* Copyright (C) 2019 Eric Seigne <eric.seigne@cap-rel.fr>
|
* Copyright (C) 2019 Eric Seigne <eric.seigne@cap-rel.fr>
|
||||||
* Copyright (C) 2021 Open-Dsi <support@open-dsi.fr>
|
* Copyright (C) 2021-2022 Open-Dsi <support@open-dsi.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
|
||||||
* 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
|
||||||
@ -47,7 +47,7 @@ $langs->loadLangs(array("other", "compta", "banks", "bills", "companies", "produ
|
|||||||
|
|
||||||
$refresh = (GETPOSTISSET('submit') || GETPOSTISSET('vat_rate_show') || GETPOSTISSET('invoice_type')) ? true : false;
|
$refresh = (GETPOSTISSET('submit') || GETPOSTISSET('vat_rate_show') || GETPOSTISSET('invoice_type')) ? true : false;
|
||||||
$invoice_type = GETPOSTISSET('invoice_type') ? GETPOST('invoice_type', 'alpha') : '';
|
$invoice_type = GETPOSTISSET('invoice_type') ? GETPOST('invoice_type', 'alpha') : '';
|
||||||
$vat_rate_show = GETPOSTISSET('vat_rate_show') ? GETPOST('vat_rate_show', 'int') : -1;
|
$vat_rate_show = GETPOSTISSET('vat_rate_show') ? GETPOST('vat_rate_show', 'alphanohtml') : -1;
|
||||||
|
|
||||||
include DOL_DOCUMENT_ROOT.'/compta/tva/initdatesforvat.inc.php';
|
include DOL_DOCUMENT_ROOT.'/compta/tva/initdatesforvat.inc.php';
|
||||||
|
|
||||||
@ -409,7 +409,7 @@ if (!is_array($x_coll) || !is_array($x_paye)) {
|
|||||||
print '<td class="tax_rate" colspan="' . ($span+1) . '">';
|
print '<td class="tax_rate" colspan="' . ($span+1) . '">';
|
||||||
print $langs->trans('Rate') . ' : ' . vatrate($rate) . '%';
|
print $langs->trans('Rate') . ' : ' . vatrate($rate) . '%';
|
||||||
print ' - <a href="'.DOL_URL_ROOT.'/compta/tva/quadri_detail.php?invoice_type=customer';
|
print ' - <a href="'.DOL_URL_ROOT.'/compta/tva/quadri_detail.php?invoice_type=customer';
|
||||||
if (!GETPOSTISSET('vat_rate_show') || GETPOST('vat_rate_show') != $rate) {
|
if ($invoice_type != 'customer' || !GETPOSTISSET('vat_rate_show') || GETPOST('vat_rate_show') != $rate) {
|
||||||
print '&vat_rate_show='.urlencode($rate);
|
print '&vat_rate_show='.urlencode($rate);
|
||||||
}
|
}
|
||||||
print '&date_startyear='.urlencode($date_start_year).'&date_startmonth='.urlencode($date_start_month).'&date_startday='.urlencode($date_start_day).'&date_endyear='.urlencode($date_end_year).'&date_endmonth='.urlencode($date_end_month).'&date_endday='.urlencode($date_end_day).'">' . img_picto('', 'chevron-down', 'class="paddingrightonly"') . $langs->trans('VATReportShowByRateDetails') . '</a>';
|
print '&date_startyear='.urlencode($date_start_year).'&date_startmonth='.urlencode($date_start_month).'&date_startday='.urlencode($date_start_day).'&date_endyear='.urlencode($date_end_year).'&date_endmonth='.urlencode($date_end_month).'&date_endday='.urlencode($date_end_day).'">' . img_picto('', 'chevron-down', 'class="paddingrightonly"') . $langs->trans('VATReportShowByRateDetails') . '</a>';
|
||||||
@ -643,7 +643,7 @@ if (!is_array($x_coll) || !is_array($x_paye)) {
|
|||||||
print '<td class="tax_rate" colspan="' . ($span+1) . '">';
|
print '<td class="tax_rate" colspan="' . ($span+1) . '">';
|
||||||
print $langs->trans('Rate') . ' : ' . vatrate($rate) . '%';
|
print $langs->trans('Rate') . ' : ' . vatrate($rate) . '%';
|
||||||
print ' - <a href="'.DOL_URL_ROOT.'/compta/tva/quadri_detail.php?invoice_type=supplier';
|
print ' - <a href="'.DOL_URL_ROOT.'/compta/tva/quadri_detail.php?invoice_type=supplier';
|
||||||
if (!GETPOSTISSET('vat_rate_show') || GETPOST('vat_rate_show') != $rate) {
|
if ($invoice_type != 'supplier' || !GETPOSTISSET('vat_rate_show') || GETPOST('vat_rate_show') != $rate) {
|
||||||
print '&vat_rate_show='.urlencode($rate);
|
print '&vat_rate_show='.urlencode($rate);
|
||||||
}
|
}
|
||||||
print '&date_startyear='.urlencode($date_start_year).'&date_startmonth='.urlencode($date_start_month).'&date_startday='.urlencode($date_start_day).'&date_endyear='.urlencode($date_end_year).'&date_endmonth='.urlencode($date_end_month).'&date_endday='.urlencode($date_end_day).'">' . img_picto('', 'chevron-down', 'class="paddingrightonly"') . $langs->trans('VATReportShowByRateDetails') . '</a>';
|
print '&date_startyear='.urlencode($date_start_year).'&date_startmonth='.urlencode($date_start_month).'&date_startday='.urlencode($date_start_day).'&date_endyear='.urlencode($date_end_year).'&date_endmonth='.urlencode($date_end_month).'&date_endday='.urlencode($date_end_day).'">' . img_picto('', 'chevron-down', 'class="paddingrightonly"') . $langs->trans('VATReportShowByRateDetails') . '</a>';
|
||||||
|
|||||||
117
htdocs/contact/project.php
Normal file
117
htdocs/contact/project.php
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2021 VIAL--GOUTEYRON Quentin <quentin.vial-gouteyron@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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file htdocs/contact/project.php
|
||||||
|
* \ingroup contact
|
||||||
|
* \brief Page of third party projects
|
||||||
|
*/
|
||||||
|
|
||||||
|
require '../main.inc.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
|
||||||
|
|
||||||
|
$langs->loadLangs(array("contacts", "companies", "projects"));
|
||||||
|
|
||||||
|
// Security check
|
||||||
|
$id = GETPOST('id', 'int');
|
||||||
|
$result = restrictedArea($user, 'contact', $id, 'socpeople&societe');
|
||||||
|
|
||||||
|
// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
|
||||||
|
$hookmanager->initHooks(array('projectcontact'));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Actions
|
||||||
|
*/
|
||||||
|
|
||||||
|
$parameters = array('id' => $id);
|
||||||
|
$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
|
||||||
|
if ($reshook < 0) {
|
||||||
|
setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* View
|
||||||
|
*/
|
||||||
|
|
||||||
|
$form = new Form($db);
|
||||||
|
|
||||||
|
if ($id) {
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/contact.lib.php';
|
||||||
|
|
||||||
|
$object = new Contact($db);
|
||||||
|
|
||||||
|
$result = $object->fetch($id);
|
||||||
|
if (empty($object->thirdparty)) {
|
||||||
|
$object->fetch_thirdparty();
|
||||||
|
}
|
||||||
|
$socid = $object->thirdparty->id;
|
||||||
|
$title = $langs->trans("Projects");
|
||||||
|
if (! empty($conf->global->MAIN_HTML_TITLE) && preg_match('/thirdpartynameonly/', $conf->global->MAIN_HTML_TITLE) && $object->name) {
|
||||||
|
$title = $object->name." - ".$title;
|
||||||
|
}
|
||||||
|
llxHeader('', $title);
|
||||||
|
|
||||||
|
if (! empty($conf->notification->enabled)) {
|
||||||
|
$langs->load("mails");
|
||||||
|
}
|
||||||
|
$head = contact_prepare_head($object);
|
||||||
|
|
||||||
|
print dol_get_fiche_head($head, 'project', $langs->trans("Contact"), -1, 'contact');
|
||||||
|
|
||||||
|
$linkback = '<a href="'.DOL_URL_ROOT.'/contact/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
|
||||||
|
|
||||||
|
$morehtmlref = '<div class="refidno">';
|
||||||
|
if (empty($conf->global->SOCIETE_DISABLE_CONTACTS) && !empty($socid)) {
|
||||||
|
$object->thirdparty->fetch($socid);
|
||||||
|
// Thirdparty
|
||||||
|
$morehtmlref .= $langs->trans('ThirdParty').' : ';
|
||||||
|
if ($object->thirdparty->id > 0) {
|
||||||
|
$morehtmlref .= $object->thirdparty->getNomUrl(1, 'contact');
|
||||||
|
} else {
|
||||||
|
$morehtmlref .= $langs->trans("ContactNotLinkedToCompany");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$morehtmlref .= '</div>';
|
||||||
|
|
||||||
|
dol_banner_tab($object, 'id', $linkback, ($user->socid ? 0 : 1), 'rowid', 'nom', $morehtmlref);
|
||||||
|
|
||||||
|
print '<div class="fichecenter">';
|
||||||
|
|
||||||
|
print '<div class="underbanner clearboth"></div>';
|
||||||
|
print '<table class="border centpercent tableforfield">';
|
||||||
|
|
||||||
|
// Civility
|
||||||
|
print '<tr><td class="titlefield">'.$langs->trans("UserTitle").'</td><td>';
|
||||||
|
print $object->getCivilityLabel();
|
||||||
|
print '</td></tr>';
|
||||||
|
|
||||||
|
print '</table>';
|
||||||
|
|
||||||
|
print '</div>';
|
||||||
|
|
||||||
|
print dol_get_fiche_end();
|
||||||
|
print '<br>';
|
||||||
|
|
||||||
|
// Projects list
|
||||||
|
$result = show_contacts_projects($conf, $langs, $db, $object, $_SERVER["PHP_SELF"].'?id='.$object->id, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// End of page
|
||||||
|
llxFooter();
|
||||||
|
$db->close();
|
||||||
@ -245,6 +245,8 @@ if ($id > 0) {
|
|||||||
$newcardbutton = '';
|
$newcardbutton = '';
|
||||||
if (!empty($conf->agenda->enabled)) {
|
if (!empty($conf->agenda->enabled)) {
|
||||||
if (!empty($user->rights->agenda->myactions->create) || !empty($user->rights->agenda->allactions->create)) {
|
if (!empty($user->rights->agenda->myactions->create) || !empty($user->rights->agenda->allactions->create)) {
|
||||||
|
$backtopage = $_SERVER['PHP_SELF'].'?id='.$object->id;
|
||||||
|
$out = '&origin='.$object->element.'&originid='.$object->id.'&backtopage='.urlencode($backtopage);
|
||||||
$newcardbutton .= dolGetButtonTitle($langs->trans('AddAction'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/comm/action/card.php?action=create'.$out);
|
$newcardbutton .= dolGetButtonTitle($langs->trans('AddAction'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/comm/action/card.php?action=create'.$out);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -40,6 +40,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/modules/contract/modules_contract.php';
|
|||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
|
||||||
if (!empty($conf->propal->enabled)) {
|
if (!empty($conf->propal->enabled)) {
|
||||||
require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php';
|
||||||
}
|
}
|
||||||
@ -248,6 +249,10 @@ if (empty($reshook)) {
|
|||||||
if ($element == 'propal') {
|
if ($element == 'propal') {
|
||||||
$element = 'comm/propal'; $subelement = 'propal';
|
$element = 'comm/propal'; $subelement = 'propal';
|
||||||
}
|
}
|
||||||
|
if ($element == 'invoice' || $element == 'facture') {
|
||||||
|
$element = 'compta/facture';
|
||||||
|
$subelement = 'facture';
|
||||||
|
}
|
||||||
|
|
||||||
$object->origin = $origin;
|
$object->origin = $origin;
|
||||||
$object->origin_id = $originid;
|
$object->origin_id = $originid;
|
||||||
@ -1040,6 +1045,10 @@ if ($action == 'create') {
|
|||||||
if ($element == 'propal') {
|
if ($element == 'propal') {
|
||||||
$element = 'comm/propal'; $subelement = 'propal';
|
$element = 'comm/propal'; $subelement = 'propal';
|
||||||
}
|
}
|
||||||
|
if ($element == 'invoice' || $element == 'facture') {
|
||||||
|
$element = 'compta/facture';
|
||||||
|
$subelement = 'facture';
|
||||||
|
}
|
||||||
|
|
||||||
dol_include_once('/'.$element.'/class/'.$subelement.'.class.php');
|
dol_include_once('/'.$element.'/class/'.$subelement.'.class.php');
|
||||||
|
|
||||||
|
|||||||
@ -387,7 +387,7 @@ class Contrat extends CommonObject
|
|||||||
if ($contratline->statut != ContratLigne::STATUS_OPEN) {
|
if ($contratline->statut != ContratLigne::STATUS_OPEN) {
|
||||||
$contratline->context = $this->context;
|
$contratline->context = $this->context;
|
||||||
|
|
||||||
$result = $contratline->active_line($user, $date_start, -1, $comment);
|
$result = $contratline->active_line($user, $date_start, -1, $comment); // This call trigger LINECONTRACT_ACTIVATE
|
||||||
if ($result < 0) {
|
if ($result < 0) {
|
||||||
$error++;
|
$error++;
|
||||||
$this->error = $contratline->error;
|
$this->error = $contratline->error;
|
||||||
|
|||||||
@ -81,7 +81,7 @@ if (!$error && $massaction == 'confirm_presend') {
|
|||||||
$listofobjectref = array();
|
$listofobjectref = array();
|
||||||
$contactidtosend = array();
|
$contactidtosend = array();
|
||||||
$attachedfilesThirdpartyObj = array();
|
$attachedfilesThirdpartyObj = array();
|
||||||
$oneemailperrecipient = (GETPOST('oneemailperrecipient') == 'on' ? 1 : 0);
|
$oneemailperrecipient = (GETPOST('oneemailperrecipient', 'int') ? 1 : 0);
|
||||||
|
|
||||||
if (!$error) {
|
if (!$error) {
|
||||||
$thirdparty = new Societe($db);
|
$thirdparty = new Societe($db);
|
||||||
|
|||||||
@ -29,13 +29,13 @@
|
|||||||
// $formSetup may be defined
|
// $formSetup may be defined
|
||||||
|
|
||||||
|
|
||||||
if ($action == 'update' && !empty($formSetup) && is_object($formSetup)) {
|
if ($action == 'update' && !empty($formSetup) && is_object($formSetup) && !empty($user->admin)) {
|
||||||
$formSetup->saveConfFromPost();
|
$formSetup->saveConfFromPost();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if ($action == 'update' && is_array($arrayofparameters)) {
|
if ($action == 'update' && is_array($arrayofparameters) && !empty($user->admin)) {
|
||||||
$db->begin();
|
$db->begin();
|
||||||
|
|
||||||
foreach ($arrayofparameters as $key => $val) {
|
foreach ($arrayofparameters as $key => $val) {
|
||||||
@ -72,8 +72,37 @@ if ($action == 'update' && is_array($arrayofparameters)) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($action == 'deletefile' && $modulepart == 'doctemplates' && !empty($user->admin)) {
|
||||||
|
include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||||
|
$keyforuploaddir = GETPOST('keyforuploaddir', 'aZ09');
|
||||||
|
|
||||||
|
$listofdir = explode(',', preg_replace('/[\r\n]+/', ',', trim(getDolGlobalString($keyforuploaddir))));
|
||||||
|
foreach ($listofdir as $key => $tmpdir) {
|
||||||
|
$tmpdir = preg_replace('/DOL_DATA_ROOT\/*/', '', $tmpdir); // Clean string if we found a hardcoded DOL_DATA_ROOT
|
||||||
|
if (!$tmpdir) {
|
||||||
|
unset($listofdir[$key]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$tmpdir = DOL_DATA_ROOT.'/'.$tmpdir; // Complete with DOL_DATA_ROOT. Only files into DOL_DATA_ROOT can be reach/set
|
||||||
|
if (!is_dir($tmpdir)) {
|
||||||
|
if (empty($nomessageinsetmoduleoptions)) {
|
||||||
|
setEventMessages($langs->trans("ErrorDirNotFound", $tmpdir), null, 'warnings');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$upload_dir = $tmpdir;
|
||||||
|
break; // So we take the first directory found into setup $conf->global->$keyforuploaddir
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$filetodelete = $tmpdir.'/'.GETPOST('file');
|
||||||
|
$result = dol_delete_file($filetodelete);
|
||||||
|
if ($result > 0) {
|
||||||
|
setEventMessages($langs->trans("FileWasRemoved", GETPOST('file')), null, 'mesgs');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Define constants for submodules that contains parameters (forms with param1, param2, ... and value1, value2, ...)
|
// Define constants for submodules that contains parameters (forms with param1, param2, ... and value1, value2, ...)
|
||||||
if ($action == 'setModuleOptions') {
|
if ($action == 'setModuleOptions' && !empty($user->admin)) {
|
||||||
$db->begin();
|
$db->begin();
|
||||||
|
|
||||||
// Process common param fields
|
// Process common param fields
|
||||||
@ -97,20 +126,22 @@ if ($action == 'setModuleOptions') {
|
|||||||
if (GETPOST('upload', 'alpha') && GETPOST('keyforuploaddir', 'aZ09')) {
|
if (GETPOST('upload', 'alpha') && GETPOST('keyforuploaddir', 'aZ09')) {
|
||||||
include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||||
$keyforuploaddir = GETPOST('keyforuploaddir', 'aZ09');
|
$keyforuploaddir = GETPOST('keyforuploaddir', 'aZ09');
|
||||||
$listofdir = explode(',', preg_replace('/[\r\n]+/', ',', trim($conf->global->$keyforuploaddir)));
|
$listofdir = explode(',', preg_replace('/[\r\n]+/', ',', trim(getDolGlobalString($keyforuploaddir))));
|
||||||
foreach ($listofdir as $key => $tmpdir) {
|
foreach ($listofdir as $key => $tmpdir) {
|
||||||
$tmpdir = trim($tmpdir);
|
$tmpdir = trim($tmpdir);
|
||||||
$tmpdir = preg_replace('/DOL_DATA_ROOT/', DOL_DATA_ROOT, $tmpdir);
|
$tmpdir = preg_replace('/DOL_DATA_ROOT\/*/', '', $tmpdir); // Clean string if we found a hardcoded DOL_DATA_ROOT
|
||||||
if (!$tmpdir) {
|
if (!$tmpdir) {
|
||||||
unset($listofdir[$key]);
|
unset($listofdir[$key]);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
$tmpdir = DOL_DATA_ROOT.'/'.$tmpdir; // Complete with DOL_DATA_ROOT. Only files into DOL_DATA_ROOT can be reach/set
|
||||||
if (!is_dir($tmpdir)) {
|
if (!is_dir($tmpdir)) {
|
||||||
if (empty($nomessageinsetmoduleoptions)) {
|
if (empty($nomessageinsetmoduleoptions)) {
|
||||||
setEventMessages($langs->trans("ErrorDirNotFound", $tmpdir), null, 'warnings');
|
setEventMessages($langs->trans("ErrorDirNotFound", $tmpdir), null, 'warnings');
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$upload_dir = $tmpdir;
|
$upload_dir = $tmpdir;
|
||||||
|
break; // So we take the first directory found into setup $conf->global->$keyforuploaddir
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($upload_dir) {
|
if ($upload_dir) {
|
||||||
|
|||||||
@ -65,58 +65,58 @@ $arrayresult = array();
|
|||||||
// Define $searchform
|
// Define $searchform
|
||||||
|
|
||||||
if (!empty($conf->adherent->enabled) && empty($conf->global->MAIN_SEARCHFORM_ADHERENT_DISABLED) && $user->rights->adherent->lire) {
|
if (!empty($conf->adherent->enabled) && empty($conf->global->MAIN_SEARCHFORM_ADHERENT_DISABLED) && $user->rights->adherent->lire) {
|
||||||
$arrayresult['searchintomember'] = array('position'=>8, 'shortcut'=>'M', 'img'=>'object_member', 'label'=>$langs->trans("SearchIntoMembers", $search_boxvalue), 'text'=>img_picto('', 'object_member').' '.$langs->trans("SearchIntoMembers", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/adherents/list.php'.($search_boxvalue ? '?sall='.urlencode($search_boxvalue) : ''));
|
$arrayresult['searchintomember'] = array('position'=>8, 'shortcut'=>'M', 'img'=>'object_member', 'label'=>$langs->trans("SearchIntoMembers", $search_boxvalue), 'text'=>img_picto('', 'object_member', 'class="pictofixedwidth"').' '.$langs->trans("SearchIntoMembers", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/adherents/list.php'.($search_boxvalue ? '?sall='.urlencode($search_boxvalue) : ''));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((!empty($conf->societe->enabled) && (empty($conf->global->SOCIETE_DISABLE_PROSPECTS) || empty($conf->global->SOCIETE_DISABLE_CUSTOMERS))) || ((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) || !empty($conf->supplier_order->enabled) || !empty($conf->supplier_invoice->enabled))) && empty($conf->global->MAIN_SEARCHFORM_SOCIETE_DISABLED) && $user->rights->societe->lire) {
|
if (((!empty($conf->societe->enabled) && (empty($conf->global->SOCIETE_DISABLE_PROSPECTS) || empty($conf->global->SOCIETE_DISABLE_CUSTOMERS))) || ((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) || !empty($conf->supplier_order->enabled) || !empty($conf->supplier_invoice->enabled))) && empty($conf->global->MAIN_SEARCHFORM_SOCIETE_DISABLED) && $user->rights->societe->lire) {
|
||||||
$arrayresult['searchintothirdparty'] = array('position'=>10, 'shortcut'=>'T', 'img'=>'object_company', 'label'=>$langs->trans("SearchIntoThirdparties", $search_boxvalue), 'text'=>img_picto('', 'object_company').' '.$langs->trans("SearchIntoThirdparties", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/societe/list.php'.($search_boxvalue ? '?sall='.urlencode($search_boxvalue) : ''));
|
$arrayresult['searchintothirdparty'] = array('position'=>10, 'shortcut'=>'T', 'img'=>'object_company', 'label'=>$langs->trans("SearchIntoThirdparties", $search_boxvalue), 'text'=>img_picto('', 'object_company', 'class="pictofixedwidth"').' '.$langs->trans("SearchIntoThirdparties", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/societe/list.php'.($search_boxvalue ? '?sall='.urlencode($search_boxvalue) : ''));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($conf->societe->enabled) && empty($conf->global->MAIN_SEARCHFORM_CONTACT_DISABLED) && $user->rights->societe->lire) {
|
if (!empty($conf->societe->enabled) && empty($conf->global->MAIN_SEARCHFORM_CONTACT_DISABLED) && $user->rights->societe->lire) {
|
||||||
$arrayresult['searchintocontact'] = array('position'=>15, 'shortcut'=>'A', 'img'=>'object_contact', 'label'=>$langs->trans("SearchIntoContacts", $search_boxvalue), 'text'=>img_picto('', 'object_contact').' '.$langs->trans("SearchIntoContacts", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/contact/list.php'.($search_boxvalue ? '?sall='.urlencode($search_boxvalue) : ''));
|
$arrayresult['searchintocontact'] = array('position'=>15, 'shortcut'=>'A', 'img'=>'object_contact', 'label'=>$langs->trans("SearchIntoContacts", $search_boxvalue), 'text'=>img_picto('', 'object_contact', 'class="pictofixedwidth"').' '.$langs->trans("SearchIntoContacts", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/contact/list.php'.($search_boxvalue ? '?sall='.urlencode($search_boxvalue) : ''));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((!empty($conf->product->enabled) && $user->rights->produit->lire) || (!empty($conf->service->enabled) && $user->rights->service->lire))
|
if (((!empty($conf->product->enabled) && $user->rights->produit->lire) || (!empty($conf->service->enabled) && $user->rights->service->lire))
|
||||||
&& empty($conf->global->MAIN_SEARCHFORM_PRODUITSERVICE_DISABLED)) {
|
&& empty($conf->global->MAIN_SEARCHFORM_PRODUITSERVICE_DISABLED)) {
|
||||||
$arrayresult['searchintoproduct'] = array('position'=>30, 'shortcut'=>'P', 'img'=>'object_product', 'label'=>$langs->trans("SearchIntoProductsOrServices", $search_boxvalue), 'text'=>img_picto('', 'object_product').' '.$langs->trans("SearchIntoProductsOrServices", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/product/list.php'.($search_boxvalue ? '?sall='.urlencode($search_boxvalue) : ''));
|
$arrayresult['searchintoproduct'] = array('position'=>30, 'shortcut'=>'P', 'img'=>'object_product', 'label'=>$langs->trans("SearchIntoProductsOrServices", $search_boxvalue), 'text'=>img_picto('', 'object_product', 'class="pictofixedwidth"').' '.$langs->trans("SearchIntoProductsOrServices", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/product/list.php'.($search_boxvalue ? '?sall='.urlencode($search_boxvalue) : ''));
|
||||||
// search on lot/serial numbers
|
// search on lot/serial numbers
|
||||||
if ( ! empty($conf->productbatch->enabled) ) {
|
if ( ! empty($conf->productbatch->enabled) ) {
|
||||||
$arrayresult['searchintobatch'] = array('position'=>32, 'shortcut'=>'B', 'img'=>'object_lot', 'label'=>$langs->trans("SearchIntoBatch", $search_boxvalue), 'text'=>img_picto('', 'object_lot').' '.$langs->trans("SearchIntoBatch", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/product/stock/productlot_list.php'.($search_boxvalue ? '?sall='.urlencode($search_boxvalue) : ''));
|
$arrayresult['searchintobatch'] = array('position'=>32, 'shortcut'=>'B', 'img'=>'object_lot', 'label'=>$langs->trans("SearchIntoBatch", $search_boxvalue), 'text'=>img_picto('', 'object_lot', 'class="pictofixedwidth"').' '.$langs->trans("SearchIntoBatch", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/product/stock/productlot_list.php'.($search_boxvalue ? '?sall='.urlencode($search_boxvalue) : ''));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($conf->mrp->enabled) && $user->rights->mrp->read && empty($conf->global->MAIN_SEARCHFORM_MRP_DISABLED)) {
|
if (!empty($conf->mrp->enabled) && $user->rights->mrp->read && empty($conf->global->MAIN_SEARCHFORM_MRP_DISABLED)) {
|
||||||
$arrayresult['searchintomo'] = array('position'=>35, 'shortcut'=>'', 'img'=>'object_mrp', 'label'=>$langs->trans("SearchIntoMO", $search_boxvalue), 'text'=>img_picto('', 'object_mrp').' '.$langs->trans("SearchIntoMO", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/mrp/mo_list.php'.($search_boxvalue ? '?search_all='.urlencode($search_boxvalue) : ''));
|
$arrayresult['searchintomo'] = array('position'=>35, 'shortcut'=>'', 'img'=>'object_mrp', 'label'=>$langs->trans("SearchIntoMO", $search_boxvalue), 'text'=>img_picto('', 'object_mrp', 'class="pictofixedwidth"').' '.$langs->trans("SearchIntoMO", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/mrp/mo_list.php'.($search_boxvalue ? '?search_all='.urlencode($search_boxvalue) : ''));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($conf->projet->enabled) && empty($conf->global->MAIN_SEARCHFORM_PROJECT_DISABLED) && $user->rights->projet->lire) {
|
if (!empty($conf->projet->enabled) && empty($conf->global->MAIN_SEARCHFORM_PROJECT_DISABLED) && $user->rights->projet->lire) {
|
||||||
$arrayresult['searchintoprojects'] = array('position'=>40, 'shortcut'=>'Q', 'img'=>'object_project', 'label'=>$langs->trans("SearchIntoProjects", $search_boxvalue), 'text'=>img_picto('', 'object_project').' '.$langs->trans("SearchIntoProjects", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/projet/list.php'.($search_boxvalue ? '?search_all='.urlencode($search_boxvalue) : ''));
|
$arrayresult['searchintoprojects'] = array('position'=>40, 'shortcut'=>'Q', 'img'=>'object_project', 'label'=>$langs->trans("SearchIntoProjects", $search_boxvalue), 'text'=>img_picto('', 'object_project', 'class="pictofixedwidth"').' '.$langs->trans("SearchIntoProjects", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/projet/list.php'.($search_boxvalue ? '?search_all='.urlencode($search_boxvalue) : ''));
|
||||||
}
|
}
|
||||||
if (!empty($conf->projet->enabled) && empty($conf->global->MAIN_SEARCHFORM_TASK_DISABLED) && $user->rights->projet->lire) {
|
if (!empty($conf->projet->enabled) && empty($conf->global->MAIN_SEARCHFORM_TASK_DISABLED) && $user->rights->projet->lire) {
|
||||||
$arrayresult['searchintotasks'] = array('position'=>45, 'img'=>'object_projecttask', 'label'=>$langs->trans("SearchIntoTasks", $search_boxvalue), 'text'=>img_picto('', 'object_projecttask').' '.$langs->trans("SearchIntoTasks", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/projet/tasks/list.php'.($search_boxvalue ? '?search_all='.urlencode($search_boxvalue) : ''));
|
$arrayresult['searchintotasks'] = array('position'=>45, 'img'=>'object_projecttask', 'label'=>$langs->trans("SearchIntoTasks", $search_boxvalue), 'text'=>img_picto('', 'object_projecttask', 'class="pictofixedwidth"').' '.$langs->trans("SearchIntoTasks", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/projet/tasks/list.php'.($search_boxvalue ? '?search_all='.urlencode($search_boxvalue) : ''));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($conf->propal->enabled) && empty($conf->global->MAIN_SEARCHFORM_CUSTOMER_PROPAL_DISABLED) && $user->rights->propal->lire) {
|
if (!empty($conf->propal->enabled) && empty($conf->global->MAIN_SEARCHFORM_CUSTOMER_PROPAL_DISABLED) && $user->rights->propal->lire) {
|
||||||
$arrayresult['searchintopropal'] = array('position'=>60, 'img'=>'object_propal', 'label'=>$langs->trans("SearchIntoCustomerProposals", $search_boxvalue), 'text'=>img_picto('', 'object_propal').' '.$langs->trans("SearchIntoCustomerProposals", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/comm/propal/list.php'.($search_boxvalue ? '?sall='.urlencode($search_boxvalue) : ''));
|
$arrayresult['searchintopropal'] = array('position'=>60, 'img'=>'object_propal', 'label'=>$langs->trans("SearchIntoCustomerProposals", $search_boxvalue), 'text'=>img_picto('', 'object_propal', 'class="pictofixedwidth"').' '.$langs->trans("SearchIntoCustomerProposals", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/comm/propal/list.php'.($search_boxvalue ? '?sall='.urlencode($search_boxvalue) : ''));
|
||||||
}
|
}
|
||||||
if (!empty($conf->commande->enabled) && empty($conf->global->MAIN_SEARCHFORM_CUSTOMER_ORDER_DISABLED) && $user->rights->commande->lire) {
|
if (!empty($conf->commande->enabled) && empty($conf->global->MAIN_SEARCHFORM_CUSTOMER_ORDER_DISABLED) && $user->rights->commande->lire) {
|
||||||
$arrayresult['searchintoorder'] = array('position'=>70, 'img'=>'object_order', 'label'=>$langs->trans("SearchIntoCustomerOrders", $search_boxvalue), 'text'=>img_picto('', 'object_order').' '.$langs->trans("SearchIntoCustomerOrders", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/commande/list.php'.($search_boxvalue ? '?sall='.urlencode($search_boxvalue) : ''));
|
$arrayresult['searchintoorder'] = array('position'=>70, 'img'=>'object_order', 'label'=>$langs->trans("SearchIntoCustomerOrders", $search_boxvalue), 'text'=>img_picto('', 'object_order', 'class="pictofixedwidth"').' '.$langs->trans("SearchIntoCustomerOrders", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/commande/list.php'.($search_boxvalue ? '?sall='.urlencode($search_boxvalue) : ''));
|
||||||
}
|
}
|
||||||
if (!empty($conf->expedition->enabled) && empty($conf->global->MAIN_SEARCHFORM_CUSTOMER_SHIPMENT_DISABLED) && $user->rights->expedition->lire) {
|
if (!empty($conf->expedition->enabled) && empty($conf->global->MAIN_SEARCHFORM_CUSTOMER_SHIPMENT_DISABLED) && $user->rights->expedition->lire) {
|
||||||
$arrayresult['searchintoshipment'] = array('position'=>80, 'img'=>'object_shipment', 'label'=>$langs->trans("SearchIntoCustomerShipments", $search_boxvalue), 'text'=>img_picto('', 'object_shipment').' '.$langs->trans("SearchIntoCustomerShipments", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/expedition/list.php'.($search_boxvalue ? '?sall='.urlencode($search_boxvalue) : ''));
|
$arrayresult['searchintoshipment'] = array('position'=>80, 'img'=>'object_shipment', 'label'=>$langs->trans("SearchIntoCustomerShipments", $search_boxvalue), 'text'=>img_picto('', 'object_shipment', 'class="pictofixedwidth"').' '.$langs->trans("SearchIntoCustomerShipments", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/expedition/list.php'.($search_boxvalue ? '?sall='.urlencode($search_boxvalue) : ''));
|
||||||
}
|
}
|
||||||
if (!empty($conf->facture->enabled) && empty($conf->global->MAIN_SEARCHFORM_CUSTOMER_INVOICE_DISABLED) && $user->rights->facture->lire) {
|
if (!empty($conf->facture->enabled) && empty($conf->global->MAIN_SEARCHFORM_CUSTOMER_INVOICE_DISABLED) && $user->rights->facture->lire) {
|
||||||
$arrayresult['searchintoinvoice'] = array('position'=>90, 'img'=>'object_bill', 'label'=>$langs->trans("SearchIntoCustomerInvoices", $search_boxvalue), 'text'=>img_picto('', 'object_bill').' '.$langs->trans("SearchIntoCustomerInvoices", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/compta/facture/list.php'.($search_boxvalue ? '?sall='.urlencode($search_boxvalue) : ''));
|
$arrayresult['searchintoinvoice'] = array('position'=>90, 'img'=>'object_bill', 'label'=>$langs->trans("SearchIntoCustomerInvoices", $search_boxvalue), 'text'=>img_picto('', 'object_bill', 'class="pictofixedwidth"').' '.$langs->trans("SearchIntoCustomerInvoices", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/compta/facture/list.php'.($search_boxvalue ? '?sall='.urlencode($search_boxvalue) : ''));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($conf->supplier_proposal->enabled) && empty($conf->global->MAIN_SEARCHFORM_SUPPLIER_PROPAL_DISABLED) && $user->rights->supplier_proposal->lire) {
|
if (!empty($conf->supplier_proposal->enabled) && empty($conf->global->MAIN_SEARCHFORM_SUPPLIER_PROPAL_DISABLED) && $user->rights->supplier_proposal->lire) {
|
||||||
$arrayresult['searchintosupplierpropal'] = array('position'=>100, 'img'=>'object_supplier_proposal', 'label'=>$langs->trans("SearchIntoSupplierProposals", $search_boxvalue), 'text'=>img_picto('', 'object_supplier_proposal').' '.$langs->trans("SearchIntoSupplierProposals", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/supplier_proposal/list.php'.($search_boxvalue ? '?sall='.urlencode($search_boxvalue) : ''));
|
$arrayresult['searchintosupplierpropal'] = array('position'=>100, 'img'=>'object_supplier_proposal', 'label'=>$langs->trans("SearchIntoSupplierProposals", $search_boxvalue), 'text'=>img_picto('', 'object_supplier_proposal', 'class="pictofixedwidth"').' '.$langs->trans("SearchIntoSupplierProposals", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/supplier_proposal/list.php'.($search_boxvalue ? '?sall='.urlencode($search_boxvalue) : ''));
|
||||||
}
|
}
|
||||||
if (((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->rights->fournisseur->commande->lire) || (!empty($conf->supplier_order->enabled) && $user->rights->supplier_order->lire)) && empty($conf->global->MAIN_SEARCHFORM_SUPPLIER_ORDER_DISABLED)) {
|
if (((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->rights->fournisseur->commande->lire) || (!empty($conf->supplier_order->enabled) && $user->rights->supplier_order->lire)) && empty($conf->global->MAIN_SEARCHFORM_SUPPLIER_ORDER_DISABLED)) {
|
||||||
$arrayresult['searchintosupplierorder'] = array('position'=>110, 'img'=>'object_supplier_order', 'label'=>$langs->trans("SearchIntoSupplierOrders", $search_boxvalue), 'text'=>img_picto('', 'object_supplier_order').' '.$langs->trans("SearchIntoSupplierOrders", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/fourn/commande/list.php'.($search_boxvalue ? '?search_all='.urlencode($search_boxvalue) : ''));
|
$arrayresult['searchintosupplierorder'] = array('position'=>110, 'img'=>'object_supplier_order', 'label'=>$langs->trans("SearchIntoSupplierOrders", $search_boxvalue), 'text'=>img_picto('', 'object_supplier_order', 'class="pictofixedwidth"').' '.$langs->trans("SearchIntoSupplierOrders", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/fourn/commande/list.php'.($search_boxvalue ? '?search_all='.urlencode($search_boxvalue) : ''));
|
||||||
}
|
}
|
||||||
if (((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->rights->fournisseur->facture->lire) || (!empty($conf->supplier_invoice->enabled) && $user->rights->supplier_invoice->lire)) && empty($conf->global->MAIN_SEARCHFORM_SUPPLIER_INVOICE_DISABLED)) {
|
if (((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->rights->fournisseur->facture->lire) || (!empty($conf->supplier_invoice->enabled) && $user->rights->supplier_invoice->lire)) && empty($conf->global->MAIN_SEARCHFORM_SUPPLIER_INVOICE_DISABLED)) {
|
||||||
$arrayresult['searchintosupplierinvoice'] = array('position'=>120, 'img'=>'object_supplier_invoice', 'label'=>$langs->trans("SearchIntoSupplierInvoices", $search_boxvalue), 'text'=>img_picto('', 'object_supplier_invoice').' '.$langs->trans("SearchIntoSupplierInvoices", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/fourn/facture/list.php'.($search_boxvalue ? '?sall='.urlencode($search_boxvalue) : ''));
|
$arrayresult['searchintosupplierinvoice'] = array('position'=>120, 'img'=>'object_supplier_invoice', 'label'=>$langs->trans("SearchIntoSupplierInvoices", $search_boxvalue), 'text'=>img_picto('', 'object_supplier_invoice', 'class="pictofixedwidth"').' '.$langs->trans("SearchIntoSupplierInvoices", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/fourn/facture/list.php'.($search_boxvalue ? '?sall='.urlencode($search_boxvalue) : ''));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Customer payments
|
// Customer payments
|
||||||
@ -125,7 +125,7 @@ if (!empty($conf->facture->enabled) && empty($conf->global->MAIN_SEARCHFORM_CUST
|
|||||||
'position'=>170,
|
'position'=>170,
|
||||||
'img'=>'object_payment',
|
'img'=>'object_payment',
|
||||||
'label'=>$langs->trans("SearchIntoCustomerPayments", $search_boxvalue),
|
'label'=>$langs->trans("SearchIntoCustomerPayments", $search_boxvalue),
|
||||||
'text'=>img_picto('', 'object_payment').' '.$langs->trans("SearchIntoCustomerPayments", $search_boxvalue),
|
'text'=>img_picto('', 'object_payment', 'class="pictofixedwidth"').' '.$langs->trans("SearchIntoCustomerPayments", $search_boxvalue),
|
||||||
'url'=>DOL_URL_ROOT.'/compta/paiement/list.php?leftmenu=customers_bills_payment'.($search_boxvalue ? '&sall='.urlencode($search_boxvalue) : ''));
|
'url'=>DOL_URL_ROOT.'/compta/paiement/list.php?leftmenu=customers_bills_payment'.($search_boxvalue ? '&sall='.urlencode($search_boxvalue) : ''));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -135,7 +135,7 @@ if (((!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_S
|
|||||||
'position'=>175,
|
'position'=>175,
|
||||||
'img'=>'object_payment',
|
'img'=>'object_payment',
|
||||||
'label'=>$langs->trans("SearchIntoVendorPayments", $search_boxvalue),
|
'label'=>$langs->trans("SearchIntoVendorPayments", $search_boxvalue),
|
||||||
'text'=>img_picto('', 'object_payment').' '.$langs->trans("SearchIntoVendorPayments", $search_boxvalue),
|
'text'=>img_picto('', 'object_payment', 'class="pictofixedwidth"').' '.$langs->trans("SearchIntoVendorPayments", $search_boxvalue),
|
||||||
'url'=>DOL_URL_ROOT.'/fourn/paiement/list.php?leftmenu=suppliers_bills_payment'.($search_boxvalue ? '&sall='.urlencode($search_boxvalue) : ''));
|
'url'=>DOL_URL_ROOT.'/fourn/paiement/list.php?leftmenu=suppliers_bills_payment'.($search_boxvalue ? '&sall='.urlencode($search_boxvalue) : ''));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -145,29 +145,29 @@ if (!empty($conf->banque->enabled) && empty($conf->global->MAIN_SEARCHFORM_MISC_
|
|||||||
'position'=>180,
|
'position'=>180,
|
||||||
'img'=>'object_payment',
|
'img'=>'object_payment',
|
||||||
'label'=>$langs->trans("SearchIntoMiscPayments", $search_boxvalue),
|
'label'=>$langs->trans("SearchIntoMiscPayments", $search_boxvalue),
|
||||||
'text'=>img_picto('', 'object_payment').' '.$langs->trans("SearchIntoMiscPayments", $search_boxvalue),
|
'text'=>img_picto('', 'object_payment', 'class="pictofixedwidth"').' '.$langs->trans("SearchIntoMiscPayments", $search_boxvalue),
|
||||||
'url'=>DOL_URL_ROOT.'/compta/bank/various_payment/list.php?leftmenu=tax_various'.($search_boxvalue ? '&sall='.urlencode($search_boxvalue) : ''));
|
'url'=>DOL_URL_ROOT.'/compta/bank/various_payment/list.php?leftmenu=tax_various'.($search_boxvalue ? '&sall='.urlencode($search_boxvalue) : ''));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($conf->contrat->enabled) && empty($conf->global->MAIN_SEARCHFORM_CONTRACT_DISABLED) && $user->rights->contrat->lire) {
|
if (!empty($conf->contrat->enabled) && empty($conf->global->MAIN_SEARCHFORM_CONTRACT_DISABLED) && $user->rights->contrat->lire) {
|
||||||
$arrayresult['searchintocontract'] = array('position'=>130, 'img'=>'object_contract', 'label'=>$langs->trans("SearchIntoContracts", $search_boxvalue), 'text'=>img_picto('', 'object_contract').' '.$langs->trans("SearchIntoContracts", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/contrat/list.php'.($search_boxvalue ? '?sall='.urlencode($search_boxvalue) : ''));
|
$arrayresult['searchintocontract'] = array('position'=>130, 'img'=>'object_contract', 'label'=>$langs->trans("SearchIntoContracts", $search_boxvalue), 'text'=>img_picto('', 'object_contract', 'class="pictofixedwidth"').' '.$langs->trans("SearchIntoContracts", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/contrat/list.php'.($search_boxvalue ? '?sall='.urlencode($search_boxvalue) : ''));
|
||||||
}
|
}
|
||||||
if (!empty($conf->ficheinter->enabled) && empty($conf->global->MAIN_SEARCHFORM_FICHINTER_DISABLED) && $user->rights->ficheinter->lire) {
|
if (!empty($conf->ficheinter->enabled) && empty($conf->global->MAIN_SEARCHFORM_FICHINTER_DISABLED) && $user->rights->ficheinter->lire) {
|
||||||
$arrayresult['searchintointervention'] = array('position'=>140, 'img'=>'object_intervention', 'label'=>$langs->trans("SearchIntoInterventions", $search_boxvalue), 'text'=>img_picto('', 'object_intervention').' '.$langs->trans("SearchIntoInterventions", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/fichinter/list.php'.($search_boxvalue ? '?sall='.urlencode($search_boxvalue) : ''));
|
$arrayresult['searchintointervention'] = array('position'=>140, 'img'=>'object_intervention', 'label'=>$langs->trans("SearchIntoInterventions", $search_boxvalue), 'text'=>img_picto('', 'object_intervention', 'class="pictofixedwidth"').' '.$langs->trans("SearchIntoInterventions", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/fichinter/list.php'.($search_boxvalue ? '?sall='.urlencode($search_boxvalue) : ''));
|
||||||
}
|
}
|
||||||
if (!empty($conf->ticket->enabled) && empty($conf->global->MAIN_SEARCHFORM_TICKET_DISABLED) && $user->rights->ticket->read) {
|
if (!empty($conf->ticket->enabled) && empty($conf->global->MAIN_SEARCHFORM_TICKET_DISABLED) && $user->rights->ticket->read) {
|
||||||
$arrayresult['searchintotickets'] = array('position'=>145, 'img'=>'object_ticket', 'label'=>$langs->trans("SearchIntoTickets", $search_boxvalue), 'text'=>img_picto('', 'object_ticket').' '.$langs->trans("SearchIntoTickets", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/ticket/list.php?mainmenu=ticket'.($search_boxvalue ? '&sall='.urlencode($search_boxvalue) : ''));
|
$arrayresult['searchintotickets'] = array('position'=>145, 'img'=>'object_ticket', 'label'=>$langs->trans("SearchIntoTickets", $search_boxvalue), 'text'=>img_picto('', 'object_ticket', 'class="pictofixedwidth"').' '.$langs->trans("SearchIntoTickets", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/ticket/list.php?mainmenu=ticket'.($search_boxvalue ? '&sall='.urlencode($search_boxvalue) : ''));
|
||||||
}
|
}
|
||||||
|
|
||||||
// HR
|
// HR
|
||||||
if (!empty($conf->user->enabled) && empty($conf->global->MAIN_SEARCHFORM_USER_DISABLED) && $user->rights->user->user->lire) {
|
if (!empty($conf->user->enabled) && empty($conf->global->MAIN_SEARCHFORM_USER_DISABLED) && $user->rights->user->user->lire) {
|
||||||
$arrayresult['searchintouser'] = array('position'=>200, 'shortcut'=>'U', 'img'=>'object_user', 'label'=>$langs->trans("SearchIntoUsers", $search_boxvalue), 'text'=>img_picto('', 'object_user').' '.$langs->trans("SearchIntoUsers", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/user/list.php'.($search_boxvalue ? '?sall='.urlencode($search_boxvalue) : ''));
|
$arrayresult['searchintouser'] = array('position'=>200, 'shortcut'=>'U', 'img'=>'object_user', 'label'=>$langs->trans("SearchIntoUsers", $search_boxvalue), 'text'=>img_picto('', 'object_user', 'class="pictofixedwidth"').' '.$langs->trans("SearchIntoUsers", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/user/list.php'.($search_boxvalue ? '?sall='.urlencode($search_boxvalue) : ''));
|
||||||
}
|
}
|
||||||
if (!empty($conf->expensereport->enabled) && empty($conf->global->MAIN_SEARCHFORM_EXPENSEREPORT_DISABLED) && $user->rights->expensereport->lire) {
|
if (!empty($conf->expensereport->enabled) && empty($conf->global->MAIN_SEARCHFORM_EXPENSEREPORT_DISABLED) && $user->rights->expensereport->lire) {
|
||||||
$arrayresult['searchintoexpensereport'] = array('position'=>210, 'img'=>'object_trip', 'label'=>$langs->trans("SearchIntoExpenseReports", $search_boxvalue), 'text'=>img_picto('', 'object_trip').' '.$langs->trans("SearchIntoExpenseReports", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/expensereport/list.php?mainmenu=hrm'.($search_boxvalue ? '&sall='.urlencode($search_boxvalue) : ''));
|
$arrayresult['searchintoexpensereport'] = array('position'=>210, 'img'=>'object_trip', 'label'=>$langs->trans("SearchIntoExpenseReports", $search_boxvalue), 'text'=>img_picto('', 'object_trip', 'class="pictofixedwidth"').' '.$langs->trans("SearchIntoExpenseReports", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/expensereport/list.php?mainmenu=hrm'.($search_boxvalue ? '&sall='.urlencode($search_boxvalue) : ''));
|
||||||
}
|
}
|
||||||
if (!empty($conf->holiday->enabled) && empty($conf->global->MAIN_SEARCHFORM_HOLIDAY_DISABLED) && $user->rights->holiday->read) {
|
if (!empty($conf->holiday->enabled) && empty($conf->global->MAIN_SEARCHFORM_HOLIDAY_DISABLED) && $user->rights->holiday->read) {
|
||||||
$arrayresult['searchintoleaves'] = array('position'=>220, 'img'=>'object_holiday', 'label'=>$langs->trans("SearchIntoLeaves", $search_boxvalue), 'text'=>img_picto('', 'object_holiday').' '.$langs->trans("SearchIntoLeaves", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/holiday/list.php?mainmenu=hrm'.($search_boxvalue ? '&sall='.urlencode($search_boxvalue) : ''));
|
$arrayresult['searchintoleaves'] = array('position'=>220, 'img'=>'object_holiday', 'label'=>$langs->trans("SearchIntoLeaves", $search_boxvalue), 'text'=>img_picto('', 'object_holiday', 'class="pictofixedwidth"').' '.$langs->trans("SearchIntoLeaves", $search_boxvalue), 'url'=>DOL_URL_ROOT.'/holiday/list.php?mainmenu=hrm'.($search_boxvalue ? '&sall='.urlencode($search_boxvalue) : ''));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Execute hook addSearchEntry
|
// Execute hook addSearchEntry
|
||||||
|
|||||||
@ -163,7 +163,7 @@ class box_produits_alerte_stock extends ModeleBoxes
|
|||||||
);
|
);
|
||||||
|
|
||||||
$this->info_box_contents[$line][] = array(
|
$this->info_box_contents[$line][] = array(
|
||||||
'td' => 'class="tdoverflowmax150 maxwidth150onsmartphone"',
|
'td' => 'class="tdoverflowmax100 maxwidth150onsmartphone"',
|
||||||
'text' => $objp->label,
|
'text' => $objp->label,
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -186,18 +186,13 @@ class box_produits_alerte_stock extends ModeleBoxes
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->info_box_contents[$line][] = array(
|
/*$this->info_box_contents[$line][] = array(
|
||||||
'td' => 'class="nowraponall right amount"',
|
'td' => 'class="nowraponall right amount"',
|
||||||
'text' => $price,
|
'text' => $price.' '.$price_base_type,
|
||||||
);
|
);*/
|
||||||
|
|
||||||
$this->info_box_contents[$line][] = array(
|
$this->info_box_contents[$line][] = array(
|
||||||
'td' => 'class="right"',
|
'td' => 'class="center nowraponall"',
|
||||||
'text' => $price_base_type,
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->info_box_contents[$line][] = array(
|
|
||||||
'td' => 'class="center"',
|
|
||||||
'text' => price2num($objp->total_stock, 'MS').' / '.$objp->seuil_stock_alerte,
|
'text' => price2num($objp->total_stock, 'MS').' / '.$objp->seuil_stock_alerte,
|
||||||
'text2'=>img_warning($langs->transnoentitiesnoconv("StockLowerThanLimit", $objp->seuil_stock_alerte)),
|
'text2'=>img_warning($langs->transnoentitiesnoconv("StockLowerThanLimit", $objp->seuil_stock_alerte)),
|
||||||
);
|
);
|
||||||
|
|||||||
@ -170,7 +170,7 @@ class box_scheduled_jobs extends ModeleBoxes
|
|||||||
);
|
);
|
||||||
$this->info_box_contents[$line][] = array(
|
$this->info_box_contents[$line][] = array(
|
||||||
'td' => 'class="center"',
|
'td' => 'class="center"',
|
||||||
'textnoformat' => ($nbjobsinerror ? '<a href="'.DOL_URL_ROOT.'/cron/list.php?search_lastresult='.urlencode('<>0').'"><div class="badge badge-danger"><i class="fa fa-exclamation-triangle"></i> '.$nbjobsinerror.'</div></a>' : '<div class="center badge-status4">0</div>')
|
'textnoformat' => ($nbjobsinerror ? '<a href="'.DOL_URL_ROOT.'/cron/list.php?search_lastresult='.urlencode('<>0').'"><div class="badge badge-danger"><i class="fa fa-exclamation-triangle"></i> '.$nbjobsinerror.'</div></a>' : '<a href="'.DOL_URL_ROOT.'/cron/list.php"><div class="center badge-status4">0</div></a>')
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
$this->info_box_contents[0][0] = array(
|
$this->info_box_contents[0][0] = array(
|
||||||
|
|||||||
@ -26,6 +26,7 @@
|
|||||||
*/
|
*/
|
||||||
include_once DOL_DOCUMENT_ROOT."/core/boxes/modules_boxes.php";
|
include_once DOL_DOCUMENT_ROOT."/core/boxes/modules_boxes.php";
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class to manage the box to show last projet
|
* Class to manage the box to show last projet
|
||||||
*/
|
*/
|
||||||
@ -63,7 +64,7 @@ class box_validated_projects extends ModeleBoxes
|
|||||||
$langs->loadLangs(array('boxes', 'projects'));
|
$langs->loadLangs(array('boxes', 'projects'));
|
||||||
|
|
||||||
$this->db = $db;
|
$this->db = $db;
|
||||||
$this->boxlabel = "ProjectsWithTask";
|
$this->boxlabel = "ProjectTasksWithoutTimeSpent";
|
||||||
|
|
||||||
$this->hidden = !($user->rights->projet->lire);
|
$this->hidden = !($user->rights->projet->lire);
|
||||||
|
|
||||||
@ -116,7 +117,7 @@ class box_validated_projects extends ModeleBoxes
|
|||||||
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."element_contact as ec ON ec.element_id = t.rowid AND fk_c_type_contact IN (-1, -2, -3)";
|
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."element_contact as ec ON ec.element_id = t.rowid AND fk_c_type_contact IN (-1, -2, -3)";
|
||||||
$sql .= " WHERE p.fk_statut = 1"; // Only open projects
|
$sql .= " WHERE p.fk_statut = 1"; // Only open projects
|
||||||
if ($projectsListId) {
|
if ($projectsListId) {
|
||||||
$sql .= ' AND p.rowid IN ('.$this->db->sanitize($projectsListId).')'; // Only project are allowed
|
$sql .= ' AND p.rowid IN ('.$this->db->sanitize($projectsListId).')'; // Only projects that are allowed
|
||||||
}
|
}
|
||||||
$sql .= " AND t.rowid NOT IN (SELECT fk_task FROM ".MAIN_DB_PREFIX."projet_task_time WHERE fk_user = ".((int) $user->id).")";
|
$sql .= " AND t.rowid NOT IN (SELECT fk_task FROM ".MAIN_DB_PREFIX."projet_task_time WHERE fk_user = ".((int) $user->id).")";
|
||||||
$sql .= " GROUP BY p.rowid, p.ref, p.fk_soc, p.dateo";
|
$sql .= " GROUP BY p.rowid, p.ref, p.fk_soc, p.dateo";
|
||||||
|
|||||||
@ -29,8 +29,9 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Class to send SMS
|
* Class to send SMS
|
||||||
* Usage: $smsfile = new CSMSFile($subject,$sendto,$replyto,$message,$filepath,$mimetype,$filename,$cc,$ccc,$deliveryreceipt,$msgishtml,$errors_to);
|
* Usage: $smsfile = new CSMSFile($subject,$sendto,$replyto,$message,$filepath,$mimetype,$filename,$cc,$ccc,$deliveryreceipt,$msgishtml,$errors_to);
|
||||||
* $smsfile->sendfile();
|
* $smsfile->socid=...; $smsfile->contact_id=...; $smsfile->member_id=...; $smsfile->fk_project=...;
|
||||||
|
* $smsfile->sendfile();
|
||||||
*/
|
*/
|
||||||
class CSMSFile
|
class CSMSFile
|
||||||
{
|
{
|
||||||
@ -48,7 +49,8 @@ class CSMSFile
|
|||||||
public $nostop;
|
public $nostop;
|
||||||
|
|
||||||
public $socid;
|
public $socid;
|
||||||
public $contactid;
|
public $contact_id;
|
||||||
|
public $member_id;
|
||||||
|
|
||||||
public $fk_project;
|
public $fk_project;
|
||||||
|
|
||||||
@ -135,6 +137,7 @@ class CSMSFile
|
|||||||
|
|
||||||
$sms->socid = $this->socid;
|
$sms->socid = $this->socid;
|
||||||
$sms->contact_id = $this->contact_id;
|
$sms->contact_id = $this->contact_id;
|
||||||
|
$sms->member_id = $this->member_id;
|
||||||
$sms->project = $this->fk_project;
|
$sms->project = $this->fk_project;
|
||||||
|
|
||||||
$res = $sms->SmsSend();
|
$res = $sms->SmsSend();
|
||||||
@ -167,6 +170,7 @@ class CSMSFile
|
|||||||
|
|
||||||
$sms->socid = $this->socid;
|
$sms->socid = $this->socid;
|
||||||
$sms->contact_id = $this->contact_id;
|
$sms->contact_id = $this->contact_id;
|
||||||
|
$sms->member_id = $this->member_id;
|
||||||
$sms->fk_project = $this->fk_project;
|
$sms->fk_project = $this->fk_project;
|
||||||
|
|
||||||
$res = $sms->SmsSend();
|
$res = $sms->SmsSend();
|
||||||
|
|||||||
@ -857,7 +857,7 @@ abstract class CommonInvoice extends CommonObject
|
|||||||
// Using TLV format
|
// Using TLV format
|
||||||
$s = pack('C1', 1).pack('C1', strlen($this->thirdparty->name)).$this->thirdparty->name;
|
$s = pack('C1', 1).pack('C1', strlen($this->thirdparty->name)).$this->thirdparty->name;
|
||||||
$s .= pack('C1', 2).pack('C1', strlen($this->thirdparty->tva_intra)).$this->thirdparty->tva_intra;
|
$s .= pack('C1', 2).pack('C1', strlen($this->thirdparty->tva_intra)).$this->thirdparty->tva_intra;
|
||||||
$s .= pack('C1', 3).pack('C1', strlen($datestring)).$date;
|
$s .= pack('C1', 3).pack('C1', strlen($datestring)).$this->date;
|
||||||
$s .= pack('C1', 4).pack('C1', strlen($pricewithtaxstring)).$pricewithtaxstring;
|
$s .= pack('C1', 4).pack('C1', strlen($pricewithtaxstring)).$pricewithtaxstring;
|
||||||
$s .= pack('C1', 5).pack('C1', strlen($pricetaxstring)).$pricetaxstring;
|
$s .= pack('C1', 5).pack('C1', strlen($pricetaxstring)).$pricetaxstring;
|
||||||
$s .= ''; // Hash of xml invoice
|
$s .= ''; // Hash of xml invoice
|
||||||
|
|||||||
@ -1215,17 +1215,20 @@ abstract class CommonObject
|
|||||||
public function delete_linked_contact($source = '', $code = '')
|
public function delete_linked_contact($source = '', $code = '')
|
||||||
{
|
{
|
||||||
// phpcs:enable
|
// phpcs:enable
|
||||||
|
$listId = '';
|
||||||
$temp = array();
|
$temp = array();
|
||||||
$typeContact = $this->liste_type_contact($source, '', 0, 0, $code);
|
$typeContact = $this->liste_type_contact($source, '', 0, 0, $code);
|
||||||
|
|
||||||
foreach ($typeContact as $key => $value) {
|
if (!empty($typeContact)) {
|
||||||
array_push($temp, $key);
|
foreach ($typeContact as $key => $value) {
|
||||||
|
array_push($temp, $key);
|
||||||
|
}
|
||||||
|
$listId = implode(",", $temp);
|
||||||
}
|
}
|
||||||
$listId = implode(",", $temp);
|
|
||||||
|
|
||||||
$sql = "DELETE FROM ".MAIN_DB_PREFIX."element_contact";
|
$sql = "DELETE FROM ".MAIN_DB_PREFIX."element_contact";
|
||||||
$sql .= " WHERE element_id = ".((int) $this->id);
|
$sql .= " WHERE element_id = ".((int) $this->id);
|
||||||
if ($listId) {
|
if (!empty($listId)) {
|
||||||
$sql .= " AND fk_c_type_contact IN (".$this->db->sanitize($listId).")";
|
$sql .= " AND fk_c_type_contact IN (".$this->db->sanitize($listId).")";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2266,7 +2269,12 @@ abstract class CommonObject
|
|||||||
*/
|
*/
|
||||||
public function setPaymentMethods($id)
|
public function setPaymentMethods($id)
|
||||||
{
|
{
|
||||||
|
global $user;
|
||||||
|
|
||||||
|
$error = 0; $notrigger = 0;
|
||||||
|
|
||||||
dol_syslog(get_class($this).'::setPaymentMethods('.$id.')');
|
dol_syslog(get_class($this).'::setPaymentMethods('.$id.')');
|
||||||
|
|
||||||
if ($this->statut >= 0 || $this->element == 'societe') {
|
if ($this->statut >= 0 || $this->element == 'societe') {
|
||||||
// TODO uniformize field name
|
// TODO uniformize field name
|
||||||
$fieldname = 'fk_mode_reglement';
|
$fieldname = 'fk_mode_reglement';
|
||||||
@ -2293,6 +2301,15 @@ abstract class CommonObject
|
|||||||
if (get_class($this) == 'Fournisseur') {
|
if (get_class($this) == 'Fournisseur') {
|
||||||
$this->mode_reglement_supplier_id = $id;
|
$this->mode_reglement_supplier_id = $id;
|
||||||
}
|
}
|
||||||
|
// Triggers
|
||||||
|
if (!$error && !$notrigger) {
|
||||||
|
// Call triggers
|
||||||
|
$result = $this->call_trigger(strtoupper(get_class($this)).'_MODIFY', $user);
|
||||||
|
if ($result < 0) {
|
||||||
|
$error++;
|
||||||
|
}
|
||||||
|
// End call triggers
|
||||||
|
}
|
||||||
return 1;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
dol_syslog(get_class($this).'::setPaymentMethods Error '.$this->db->error());
|
dol_syslog(get_class($this).'::setPaymentMethods Error '.$this->db->error());
|
||||||
@ -7595,7 +7612,7 @@ abstract class CommonObject
|
|||||||
} else { return true; }
|
} else { return true; }
|
||||||
} elseif (in_array($type, array('double', 'real', 'price'))) {
|
} elseif (in_array($type, array('double', 'real', 'price'))) {
|
||||||
// is numeric
|
// is numeric
|
||||||
if (!$validate->isDuration($fieldValue)) {
|
if (!$validate->isNumeric($fieldValue)) {
|
||||||
$this->setFieldError($fieldKey, $validate->error);
|
$this->setFieldError($fieldKey, $validate->error);
|
||||||
return false;
|
return false;
|
||||||
} else { return true; }
|
} else { return true; }
|
||||||
|
|||||||
@ -258,7 +258,7 @@ class Conf
|
|||||||
// Define all global constants into $this->global->key=value
|
// Define all global constants into $this->global->key=value
|
||||||
$sql = "SELECT ".$db->decrypt('name')." as name,";
|
$sql = "SELECT ".$db->decrypt('name')." as name,";
|
||||||
$sql .= " ".$db->decrypt('value')." as value, entity";
|
$sql .= " ".$db->decrypt('value')." as value, entity";
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."const";
|
$sql .= " FROM ".$db->prefix()."const";
|
||||||
$sql .= " WHERE entity IN (0,".$this->entity.")";
|
$sql .= " WHERE entity IN (0,".$this->entity.")";
|
||||||
$sql .= " ORDER BY entity"; // This is to have entity 0 first, then entity 1 that overwrite.
|
$sql .= " ORDER BY entity"; // This is to have entity 0 first, then entity 1 that overwrite.
|
||||||
|
|
||||||
|
|||||||
@ -804,9 +804,6 @@ class ExtraFields
|
|||||||
if ($elementtype == 'order_supplier') {
|
if ($elementtype == 'order_supplier') {
|
||||||
$elementtype = 'commande_fournisseur';
|
$elementtype = 'commande_fournisseur';
|
||||||
}
|
}
|
||||||
if ($elementtype == 'stock_mouvement') {
|
|
||||||
$elementtype = 'movement';
|
|
||||||
}
|
|
||||||
|
|
||||||
$array_name_label = array();
|
$array_name_label = array();
|
||||||
|
|
||||||
|
|||||||
@ -1690,11 +1690,16 @@ class Form
|
|||||||
$out .= '<select class="flat'.($moreclass ? ' '.$moreclass : '').'" id="'.$htmlid.'" name="'.$htmlname.(($num || empty($disableifempty)) ? '' : ' disabled').($multiple ? '[]' : '').'" '.($multiple ? 'multiple' : '').' '.(!empty($moreparam) ? $moreparam : '').'>';
|
$out .= '<select class="flat'.($moreclass ? ' '.$moreclass : '').'" id="'.$htmlid.'" name="'.$htmlname.(($num || empty($disableifempty)) ? '' : ' disabled').($multiple ? '[]' : '').'" '.($multiple ? 'multiple' : '').' '.(!empty($moreparam) ? $moreparam : '').'>';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (($showempty == 1 || ($showempty == 3 && $num > 1)) && !$multiple) {
|
if ($showempty && ! is_numeric($showempty)) {
|
||||||
$out .= '<option value="0"'.(in_array(0, $selected) ? ' selected' : '').'> </option>';
|
$textforempty = $showempty;
|
||||||
}
|
$out .= '<option class="optiongrey" value="-1"'.(in_array(-1, $selected) ? ' selected' : '').'>'.$textforempty.'</option>';
|
||||||
if ($showempty == 2) {
|
} else {
|
||||||
$out .= '<option value="0"'.(in_array(0, $selected) ? ' selected' : '').'>-- '.$langs->trans("Internal").' --</option>';
|
if (($showempty == 1 || ($showempty == 3 && $num > 1)) && ! $multiple) {
|
||||||
|
$out .= '<option value="0"'.(in_array(0, $selected) ? ' selected' : '').'> </option>';
|
||||||
|
}
|
||||||
|
if ($showempty == 2) {
|
||||||
|
$out .= '<option value="0"'.(in_array(0, $selected) ? ' selected' : '').'>-- '.$langs->trans("Internal").' --</option>';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$i = 0;
|
$i = 0;
|
||||||
@ -2362,6 +2367,69 @@ class Form
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return list of BOM for customer in Ajax if Ajax activated or go to select_produits_list
|
||||||
|
*
|
||||||
|
* @param int $selected Preselected BOM id
|
||||||
|
* @param string $htmlname Name of HTML select field (must be unique in page).
|
||||||
|
* @param int $limit Limit on number of returned lines
|
||||||
|
* @param int $status Sell status -1=Return all bom, 0=Draft BOM, 1=Validated BOM
|
||||||
|
* @param int $type type of the BOM (-1=Return all BOM, 0=Return disassemble BOM, 1=Return manufacturing BOM)
|
||||||
|
* @param string $showempty '' to not show empty line. Translation key to show an empty line. '1' show empty line with no text.
|
||||||
|
* @param string $morecss Add more css on select
|
||||||
|
* @param string $nooutput No print, return the output into a string
|
||||||
|
* @param int $forcecombo Force to use combo box
|
||||||
|
* @return void|string
|
||||||
|
*/
|
||||||
|
public function select_bom($selected = '', $htmlname = 'bom_id', $limit = 0, $status = 1, $type = 1, $showempty = '1', $morecss = '', $nooutput = '', $forcecombo = 0)
|
||||||
|
{
|
||||||
|
// phpcs:enable
|
||||||
|
global $conf, $user, $langs, $db;
|
||||||
|
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
|
||||||
|
|
||||||
|
$error = 0;
|
||||||
|
$out = '';
|
||||||
|
|
||||||
|
if (!$forcecombo) {
|
||||||
|
include_once DOL_DOCUMENT_ROOT.'/core/lib/ajax.lib.php';
|
||||||
|
$out .= ajax_combobox($htmlname, $events, getDolGlobalInt("PRODUIT_USE_SEARCH_TO_SELECT"));
|
||||||
|
}
|
||||||
|
|
||||||
|
$out .= '<select class="flat'.($morecss ? ' '.$morecss : '').'" name="'.$htmlname.'" id="'.$htmlname.'">';
|
||||||
|
|
||||||
|
$sql = 'SELECT b.rowid, b.ref, b.label, b.fk_product';
|
||||||
|
$sql.= ' FROM '.MAIN_DB_PREFIX.'bom_bom as b';
|
||||||
|
$sql.= ' WHERE b.entity IN ('.getEntity('bom').')';
|
||||||
|
if (!empty($status)) $sql.= ' AND status = '. (int) $status;
|
||||||
|
if (!empty($type)) $sql.= ' AND status = '. (int) $type;
|
||||||
|
if (!empty($limit)) $sql.= 'LIMIT '. (int) $limit;
|
||||||
|
$resql = $db->query($sql);
|
||||||
|
if ($resql) {
|
||||||
|
if ($showempty) {
|
||||||
|
$out .= '<option value="-1"';
|
||||||
|
if (empty($selected)) $out .= ' selected';
|
||||||
|
$out .= '> </option>';
|
||||||
|
}
|
||||||
|
while ($obj = $db->fetch_object($resql)) {
|
||||||
|
$product = new Product($db);
|
||||||
|
$res = $product->fetch($obj->fk_product);
|
||||||
|
if ($obj->rowid == $selected) $out .= '<option value="'.$obj->rowid.'" selected>'.$obj->ref.' - '. $product->label .' - '.$obj->label.'</option>';
|
||||||
|
$out .= '<option value="'.$obj->rowid.'">'.$obj->ref.' - '.$product->label .' - '. $obj->label.'</option>';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$error++;
|
||||||
|
dol_print_error($db);
|
||||||
|
}
|
||||||
|
if (empty($nooutput)) {
|
||||||
|
print $out;
|
||||||
|
} else {
|
||||||
|
return $out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
||||||
/**
|
/**
|
||||||
* Return list of products for a customer.
|
* Return list of products for a customer.
|
||||||
@ -3896,7 +3964,7 @@ class Form
|
|||||||
|
|
||||||
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
||||||
/**
|
/**
|
||||||
* Return list of payment modes.
|
* print list of payment modes.
|
||||||
* Constant MAIN_DEFAULT_PAYMENT_TERM_ID can used to set default value but scope is all application, probably not what you want.
|
* Constant MAIN_DEFAULT_PAYMENT_TERM_ID can used to set default value but scope is all application, probably not what you want.
|
||||||
* See instead to force the default value by the caller.
|
* See instead to force the default value by the caller.
|
||||||
*
|
*
|
||||||
@ -3911,8 +3979,28 @@ class Form
|
|||||||
public function select_conditions_paiements($selected = 0, $htmlname = 'condid', $filtertype = -1, $addempty = 0, $noinfoadmin = 0, $morecss = '')
|
public function select_conditions_paiements($selected = 0, $htmlname = 'condid', $filtertype = -1, $addempty = 0, $noinfoadmin = 0, $morecss = '')
|
||||||
{
|
{
|
||||||
// phpcs:enable
|
// phpcs:enable
|
||||||
global $langs, $user, $conf;
|
print $this->getSelectConditionsPaiements($selected, $htmlname, $filtertype, $addempty, $noinfoadmin, $morecss);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return list of payment modes.
|
||||||
|
* Constant MAIN_DEFAULT_PAYMENT_TERM_ID can used to set default value but scope is all application, probably not what you want.
|
||||||
|
* See instead to force the default value by the caller.
|
||||||
|
*
|
||||||
|
* @param int $selected Id of payment term to preselect by default
|
||||||
|
* @param string $htmlname Nom de la zone select
|
||||||
|
* @param int $filtertype Not used
|
||||||
|
* @param int $addempty Add an empty entry
|
||||||
|
* @param int $noinfoadmin 0=Add admin info, 1=Disable admin info
|
||||||
|
* @param string $morecss Add more CSS on select tag
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function getSelectConditionsPaiements($selected = 0, $htmlname = 'condid', $filtertype = -1, $addempty = 0, $noinfoadmin = 0, $morecss = '')
|
||||||
|
{
|
||||||
|
|
||||||
|
global $langs, $user, $conf;
|
||||||
|
$out = '';
|
||||||
dol_syslog(__METHOD__." selected=".$selected.", htmlname=".$htmlname, LOG_DEBUG);
|
dol_syslog(__METHOD__." selected=".$selected.", htmlname=".$htmlname, LOG_DEBUG);
|
||||||
|
|
||||||
$this->load_cache_conditions_paiements();
|
$this->load_cache_conditions_paiements();
|
||||||
@ -3922,24 +4010,25 @@ class Form
|
|||||||
$selected = $conf->global->MAIN_DEFAULT_PAYMENT_TERM_ID;
|
$selected = $conf->global->MAIN_DEFAULT_PAYMENT_TERM_ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
print '<select id="'.$htmlname.'" class="flat selectpaymentterms'.($morecss ? ' '.$morecss : '').'" name="'.$htmlname.'">';
|
$out.= '<select id="'.$htmlname.'" class="flat selectpaymentterms'.($morecss ? ' '.$morecss : '').'" name="'.$htmlname.'">';
|
||||||
if ($addempty) {
|
if ($addempty) {
|
||||||
print '<option value="0"> </option>';
|
$out.= '<option value="0"> </option>';
|
||||||
}
|
}
|
||||||
foreach ($this->cache_conditions_paiements as $id => $arrayconditions) {
|
foreach ($this->cache_conditions_paiements as $id => $arrayconditions) {
|
||||||
if ($selected == $id) {
|
if ($selected == $id) {
|
||||||
print '<option value="'.$id.'" selected>';
|
$out.= '<option value="'.$id.'" selected>';
|
||||||
} else {
|
} else {
|
||||||
print '<option value="'.$id.'">';
|
$out.= '<option value="'.$id.'">';
|
||||||
}
|
}
|
||||||
print $arrayconditions['label'];
|
$out.= $arrayconditions['label'];
|
||||||
print '</option>';
|
$out.= '</option>';
|
||||||
}
|
}
|
||||||
print '</select>';
|
$out.= '</select>';
|
||||||
if ($user->admin && empty($noinfoadmin)) {
|
if ($user->admin && empty($noinfoadmin)) {
|
||||||
print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1);
|
$out.= info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1);
|
||||||
}
|
}
|
||||||
print ajax_combobox($htmlname);
|
$out.= ajax_combobox($htmlname);
|
||||||
|
return $out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -6246,7 +6335,7 @@ class Form
|
|||||||
if (empty($conf->global->MAIN_POPUP_CALENDAR_ON_FOCUS)) {
|
if (empty($conf->global->MAIN_POPUP_CALENDAR_ON_FOCUS)) {
|
||||||
$retstring .= "
|
$retstring .= "
|
||||||
showOn: 'button', /* both has problem with autocompletion */
|
showOn: 'button', /* both has problem with autocompletion */
|
||||||
buttonImage: '".DOL_URL_ROOT."/theme/".$conf->theme."/img/object_calendarday.png',
|
buttonImage: '".DOL_URL_ROOT."/theme/".dol_escape_js($conf->theme)."/img/object_calendarday.png',
|
||||||
buttonImageOnly: true";
|
buttonImageOnly: true";
|
||||||
}
|
}
|
||||||
$retstring .= "
|
$retstring .= "
|
||||||
@ -6259,7 +6348,7 @@ class Form
|
|||||||
$retstring .= '<input id="'.$prefix.'" name="'.$prefix.'" type="text" class="maxwidthdate" maxlength="11" value="'.$formated_date.'"';
|
$retstring .= '<input id="'.$prefix.'" name="'.$prefix.'" type="text" class="maxwidthdate" maxlength="11" value="'.$formated_date.'"';
|
||||||
$retstring .= ($disabled ? ' disabled' : '');
|
$retstring .= ($disabled ? ' disabled' : '');
|
||||||
$retstring .= ($placeholder ? ' placeholder="'.dol_escape_htmltag($placeholder).'"' : '');
|
$retstring .= ($placeholder ? ' placeholder="'.dol_escape_htmltag($placeholder).'"' : '');
|
||||||
$retstring .= ' onChange="dpChangeDay(\''.$prefix.'\',\''.$langs->trans("FormatDateShortJavaInput").'\'); "'; // FormatDateShortInput for dol_print_date / FormatDateShortJavaInput that is same for javascript
|
$retstring .= ' onChange="dpChangeDay(\''.dol_escape_js($prefix).'\',\''.dol_escape_js($langs->trans("FormatDateShortJavaInput")).'\'); "'; // FormatDateShortInput for dol_print_date / FormatDateShortJavaInput that is same for javascript
|
||||||
$retstring .= '>';
|
$retstring .= '>';
|
||||||
|
|
||||||
// Icone calendrier
|
// Icone calendrier
|
||||||
@ -7993,6 +8082,31 @@ class Form
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Try also magic suggest
|
||||||
|
$out .= '<select id="'.$htmlname.'" class="multiselect'.($morecss ? ' '.$morecss : '').'" multiple name="'.$htmlname.'[]"'.($moreattrib ? ' '.$moreattrib : '').($width ? ' style="width: '.(preg_match('/%/', $width) ? $width : $width.'px').'"' : '').'>'."\n";
|
||||||
|
if (is_array($array) && !empty($array)) {
|
||||||
|
if ($value_as_key) {
|
||||||
|
$array = array_combine($array, $array);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($array)) {
|
||||||
|
foreach ($array as $key => $value) {
|
||||||
|
$newval = ($translate ? $langs->trans($value) : $value);
|
||||||
|
$newval = ($key_in_label ? $key.' - '.$newval : $newval);
|
||||||
|
|
||||||
|
$out .= '<option value="'.$key.'"';
|
||||||
|
if (is_array($selected) && !empty($selected) && in_array((string) $key, $selected) && ((string) $key != '')) {
|
||||||
|
$out .= ' selected';
|
||||||
|
}
|
||||||
|
$out .= ' data-html="'.dol_escape_htmltag($newval).'"';
|
||||||
|
$out .= '>';
|
||||||
|
$out .= dol_htmlentitiesbr($newval);
|
||||||
|
$out .= '</option>'."\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$out .= '</select>'."\n";
|
||||||
|
|
||||||
// Add code for jquery to use multiselect
|
// Add code for jquery to use multiselect
|
||||||
if (!empty($conf->use_javascript_ajax) && !empty($conf->global->MAIN_USE_JQUERY_MULTISELECT) || defined('REQUIRE_JQUERY_MULTISELECT')) {
|
if (!empty($conf->use_javascript_ajax) && !empty($conf->global->MAIN_USE_JQUERY_MULTISELECT) || defined('REQUIRE_JQUERY_MULTISELECT')) {
|
||||||
$out .= "\n".'<!-- JS CODE TO ENABLE select for id '.$htmlname.', addjscombo='.$addjscombo.' -->';
|
$out .= "\n".'<!-- JS CODE TO ENABLE select for id '.$htmlname.', addjscombo='.$addjscombo.' -->';
|
||||||
@ -8047,31 +8161,6 @@ class Form
|
|||||||
$out .= '</script>';
|
$out .= '</script>';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try also magic suggest
|
|
||||||
$out .= '<select id="'.$htmlname.'" class="multiselect'.($morecss ? ' '.$morecss : '').'" multiple name="'.$htmlname.'[]"'.($moreattrib ? ' '.$moreattrib : '').($width ? ' style="width: '.(preg_match('/%/', $width) ? $width : $width.'px').'"' : '').'>'."\n";
|
|
||||||
if (is_array($array) && !empty($array)) {
|
|
||||||
if ($value_as_key) {
|
|
||||||
$array = array_combine($array, $array);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty($array)) {
|
|
||||||
foreach ($array as $key => $value) {
|
|
||||||
$newval = ($translate ? $langs->trans($value) : $value);
|
|
||||||
$newval = ($key_in_label ? $key.' - '.$newval : $newval);
|
|
||||||
|
|
||||||
$out .= '<option value="'.$key.'"';
|
|
||||||
if (is_array($selected) && !empty($selected) && in_array((string) $key, $selected) && ((string) $key != '')) {
|
|
||||||
$out .= ' selected';
|
|
||||||
}
|
|
||||||
$out .= ' data-html="'.dol_escape_htmltag($newval).'"';
|
|
||||||
$out .= '>';
|
|
||||||
$out .= dol_htmlentitiesbr($newval);
|
|
||||||
$out .= '</option>'."\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$out .= '</select>'."\n";
|
|
||||||
|
|
||||||
return $out;
|
return $out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -73,15 +73,19 @@ class FormAdmin
|
|||||||
|
|
||||||
$langs_available = $langs->get_available_languages(DOL_DOCUMENT_ROOT, 12, 0, $mainlangonly);
|
$langs_available = $langs->get_available_languages(DOL_DOCUMENT_ROOT, 12, 0, $mainlangonly);
|
||||||
|
|
||||||
// If the language to select is not inside the list of available language and empty value is not available, we must find
|
// If empty value is not allowed and the language to select is not inside the list of available language and we must find
|
||||||
// an alternative as the language code to pre-select (to avoid to have first element in list pre-selected).
|
// an alternative of the language code to pre-select (to avoid to have first element in list pre-selected).
|
||||||
if ($selected && !array_key_exists($selected, $langs_available) && empty($showempty)) {
|
if ($selected && empty($showempty)) {
|
||||||
$tmparray = explode('_', $selected);
|
if (!is_array($selected) && !array_key_exists($selected, $langs_available)) {
|
||||||
if (!empty($tmparray[1])) {
|
$tmparray = explode('_', $selected);
|
||||||
$selected = getLanguageCodeFromCountryCode($tmparray[1]);
|
if (!empty($tmparray[1])) {
|
||||||
}
|
$selected = getLanguageCodeFromCountryCode($tmparray[1]);
|
||||||
if (empty($selected)) {
|
}
|
||||||
$selected = $langs->defaultlang;
|
if (empty($selected)) {
|
||||||
|
$selected = $langs->defaultlang;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// If the preselected value is an array, we do not try to find alternative to preselect
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -379,9 +379,10 @@ class FormFile
|
|||||||
* @param Object $object Object when method is called from an object card.
|
* @param Object $object Object when method is called from an object card.
|
||||||
* @param int $hideifempty Hide section of generated files if there is no file
|
* @param int $hideifempty Hide section of generated files if there is no file
|
||||||
* @param string $removeaction (optional) The action to remove a file
|
* @param string $removeaction (optional) The action to remove a file
|
||||||
|
* @param string $tooltipontemplatecombo Text to show on a tooltip after the combo list of templates
|
||||||
* @return string Output string with HTML array of documents (might be empty string)
|
* @return string Output string with HTML array of documents (might be empty string)
|
||||||
*/
|
*/
|
||||||
public function showdocuments($modulepart, $modulesubdir, $filedir, $urlsource, $genallowed, $delallowed = 0, $modelselected = '', $allowgenifempty = 1, $forcenomultilang = 0, $iconPDF = 0, $notused = 0, $noform = 0, $param = '', $title = '', $buttonlabel = '', $codelang = '', $morepicto = '', $object = null, $hideifempty = 0, $removeaction = 'remove_file')
|
public function showdocuments($modulepart, $modulesubdir, $filedir, $urlsource, $genallowed, $delallowed = 0, $modelselected = '', $allowgenifempty = 1, $forcenomultilang = 0, $iconPDF = 0, $notused = 0, $noform = 0, $param = '', $title = '', $buttonlabel = '', $codelang = '', $morepicto = '', $object = null, $hideifempty = 0, $removeaction = 'remove_file', $tooltipontemplatecombo = '')
|
||||||
{
|
{
|
||||||
global $dolibarr_main_url_root;
|
global $dolibarr_main_url_root;
|
||||||
|
|
||||||
@ -769,6 +770,7 @@ class FormFile
|
|||||||
if ($conf->use_javascript_ajax) {
|
if ($conf->use_javascript_ajax) {
|
||||||
$out .= ajax_combobox('model');
|
$out .= ajax_combobox('model');
|
||||||
}
|
}
|
||||||
|
$out .= $form->textwithpicto('', $tooltipontemplatecombo, 1, 'help', 'marginrightonly', 0, 3, '', 0);
|
||||||
} else {
|
} else {
|
||||||
$out .= '<div class="float">'.$langs->trans("Files").'</div>';
|
$out .= '<div class="float">'.$langs->trans("Files").'</div>';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -157,6 +157,7 @@ class FormMail extends Form
|
|||||||
|
|
||||||
public $lines_model;
|
public $lines_model;
|
||||||
|
|
||||||
|
// -1 suggest the checkbox 'one email per recipient' not checked, 0 = no suggestion, 1 = suggest and checked
|
||||||
public $withoptiononeemailperrecipient;
|
public $withoptiononeemailperrecipient;
|
||||||
|
|
||||||
|
|
||||||
@ -357,7 +358,7 @@ class FormMail extends Form
|
|||||||
// phpcs:enable
|
// phpcs:enable
|
||||||
global $conf, $langs, $user, $hookmanager, $form;
|
global $conf, $langs, $user, $hookmanager, $form;
|
||||||
|
|
||||||
// Required to show preview of mail attachments
|
// Required to show preview wof mail attachments
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
|
||||||
$formfile = new Formfile($this->db);
|
$formfile = new Formfile($this->db);
|
||||||
|
|
||||||
@ -366,7 +367,7 @@ class FormMail extends Form
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Load translation files required by the page
|
// Load translation files required by the page
|
||||||
$langs->loadLangs(array('other', 'mails'));
|
$langs->loadLangs(array('other', 'mails', 'members'));
|
||||||
|
|
||||||
// Clear temp files. Must be done before call of triggers, at beginning (mode = init), or when we select a new template
|
// Clear temp files. Must be done before call of triggers, at beginning (mode = init), or when we select a new template
|
||||||
if (GETPOST('mode', 'alpha') == 'init' || (GETPOST('modelselected') && GETPOST('modelmailselected', 'alpha') && GETPOST('modelmailselected', 'alpha') != '-1')) {
|
if (GETPOST('mode', 'alpha') == 'init' || (GETPOST('modelselected') && GETPOST('modelmailselected', 'alpha') && GETPOST('modelmailselected', 'alpha') != '-1')) {
|
||||||
@ -464,11 +465,10 @@ class FormMail extends Form
|
|||||||
$modelmail_array = array();
|
$modelmail_array = array();
|
||||||
if ($this->param['models'] != 'none') {
|
if ($this->param['models'] != 'none') {
|
||||||
$result = $this->fetchAllEMailTemplate($this->param["models"], $user, $outputlangs);
|
$result = $this->fetchAllEMailTemplate($this->param["models"], $user, $outputlangs);
|
||||||
|
|
||||||
if ($result < 0) {
|
if ($result < 0) {
|
||||||
setEventMessages($this->error, $this->errors, 'errors');
|
setEventMessages($this->error, $this->errors, 'errors');
|
||||||
}
|
}
|
||||||
$langs->trans("members");
|
|
||||||
foreach ($this->lines_model as $line) {
|
foreach ($this->lines_model as $line) {
|
||||||
$reg = array();
|
$reg = array();
|
||||||
if (preg_match('/\((.*)\)/', $line->label, $reg)) {
|
if (preg_match('/\((.*)\)/', $line->label, $reg)) {
|
||||||
@ -503,7 +503,7 @@ class FormMail extends Form
|
|||||||
}
|
}
|
||||||
|
|
||||||
$out .= ' ';
|
$out .= ' ';
|
||||||
$out .= '<input type="submit" class="button" value="'.$langs->trans('Apply').'" name="modelselected" id="modelselected">';
|
$out .= '<input type="submit" class="button reposition" value="'.$langs->trans('Apply').'" name="modelselected" id="modelselected">';
|
||||||
$out .= ' ';
|
$out .= ' ';
|
||||||
$out .= '</div>';
|
$out .= '</div>';
|
||||||
} elseif (!empty($this->param['models']) && in_array($this->param['models'], array(
|
} elseif (!empty($this->param['models']) && in_array($this->param['models'], array(
|
||||||
@ -526,7 +526,7 @@ class FormMail extends Form
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$out .= '<table class="tableforemailform boxtablenotop" width="100%">'."\n";
|
$out .= '<table class="tableforemailform boxtablenotop centpercent">'."\n";
|
||||||
|
|
||||||
// Substitution array/string
|
// Substitution array/string
|
||||||
$helpforsubstitution = '';
|
$helpforsubstitution = '';
|
||||||
@ -688,16 +688,20 @@ class FormMail extends Form
|
|||||||
|
|
||||||
// With option one email per recipient
|
// With option one email per recipient
|
||||||
if (!empty($this->withoptiononeemailperrecipient)) {
|
if (!empty($this->withoptiononeemailperrecipient)) {
|
||||||
$out .= '<tr><td class="minwidth200">';
|
if (abs($this->withoptiononeemailperrecipient) == 1) {
|
||||||
$out .= $langs->trans("GroupEmails");
|
$out .= '<tr><td class="minwidth200">';
|
||||||
$out .= '</td><td>';
|
$out .= $langs->trans("GroupEmails");
|
||||||
$out .= ' <input type="checkbox" id="oneemailperrecipient" name="oneemailperrecipient"'.($this->withoptiononeemailperrecipient > 0 ? ' checked="checked"' : '').'> ';
|
$out .= '</td><td>';
|
||||||
$out .= '<label for="oneemailperrecipient">'.$langs->trans("OneEmailPerRecipient").'</label>';
|
$out .= ' <input type="checkbox" id="oneemailperrecipient" value="1" name="oneemailperrecipient"'.($this->withoptiononeemailperrecipient > 0 ? ' checked="checked"' : '').'> ';
|
||||||
$out .= '<span class="hideonsmartphone opacitymedium">';
|
$out .= '<label for="oneemailperrecipient">'.$langs->trans("OneEmailPerRecipient").'</label>';
|
||||||
$out .= ' - ';
|
$out .= '<span class="hideonsmartphone opacitymedium">';
|
||||||
$out .= $langs->trans("WarningIfYouCheckOneRecipientPerEmail");
|
$out .= ' - ';
|
||||||
$out .= '</span>';
|
$out .= $langs->trans("WarningIfYouCheckOneRecipientPerEmail");
|
||||||
$out .= '</td></tr>';
|
$out .= '</span>';
|
||||||
|
$out .= '</td></tr>';
|
||||||
|
} else {
|
||||||
|
$out .= '<tr><td><input type="hidden" name="oneemailperrecipient" value="1"></td><td></td></tr>';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// CC
|
// CC
|
||||||
@ -813,8 +817,7 @@ class FormMail extends Form
|
|||||||
$out .= '<br></div>';
|
$out .= '<br></div>';
|
||||||
}
|
}
|
||||||
} elseif (empty($this->withmaindocfile)) {
|
} elseif (empty($this->withmaindocfile)) {
|
||||||
// Do not show message if we asked to show the checkbox
|
$out .= '<span class="opacitymedium">'.$langs->trans("NoAttachedFiles").'</span><br>';
|
||||||
$out .= $langs->trans("NoAttachedFiles").'<br>';
|
|
||||||
}
|
}
|
||||||
if ($this->withfile == 2) {
|
if ($this->withfile == 2) {
|
||||||
// Can add other files
|
// Can add other files
|
||||||
@ -1217,6 +1220,7 @@ class FormMail extends Form
|
|||||||
global $conf, $langs, $form;
|
global $conf, $langs, $form;
|
||||||
|
|
||||||
$defaulttopic = GETPOST('subject', 'restricthtml');
|
$defaulttopic = GETPOST('subject', 'restricthtml');
|
||||||
|
|
||||||
if (!GETPOST('modelselected', 'alpha') || GETPOST('modelmailselected') != '-1') {
|
if (!GETPOST('modelselected', 'alpha') || GETPOST('modelmailselected') != '-1') {
|
||||||
if ($arraydefaultmessage && $arraydefaultmessage->topic) {
|
if ($arraydefaultmessage && $arraydefaultmessage->topic) {
|
||||||
$defaulttopic = $arraydefaultmessage->topic;
|
$defaulttopic = $arraydefaultmessage->topic;
|
||||||
|
|||||||
@ -1261,7 +1261,7 @@ class FormTicket
|
|||||||
// Zone to select its email template
|
// Zone to select its email template
|
||||||
if (count($modelmail_array) > 0) {
|
if (count($modelmail_array) > 0) {
|
||||||
print '<tr class="email_line"><td></td><td colspan="2"><div style="padding: 3px 0 3px 0">'."\n";
|
print '<tr class="email_line"><td></td><td colspan="2"><div style="padding: 3px 0 3px 0">'."\n";
|
||||||
print $langs->trans('SelectMailModel').': '.$formmail->selectarray('modelmailselected', $modelmail_array, $this->param['models_id'], 1);
|
print $langs->trans('SelectMailModel').': '.$formmail->selectarray('modelmailselected', $modelmail_array, $this->param['models_id'], 1, 0, "", "", 0, 0, 0, '', 'minwidth200');
|
||||||
if ($user->admin) {
|
if ($user->admin) {
|
||||||
print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1);
|
print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -55,18 +55,17 @@ class Validate
|
|||||||
{
|
{
|
||||||
global $langs;
|
global $langs;
|
||||||
|
|
||||||
if ($outputLang) {
|
if (empty($outputLang)) {
|
||||||
$this->outputLang = $langs;
|
$this->outputLang = $langs;
|
||||||
} else {
|
} else {
|
||||||
$this->outputLang = $outputLang;
|
$this->outputLang = $outputLang;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_object($this->outputLang) || !method_exists($outputLang, 'load')) {
|
if (!is_object($this->outputLang) || !method_exists($this->outputLang, 'load')) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @var Translate $outputLang */
|
$this->outputLang->loadLangs(array('validate', 'errors'));
|
||||||
$outputLang->load('validate');
|
|
||||||
|
|
||||||
$this->db = $db;
|
$this->db = $db;
|
||||||
}
|
}
|
||||||
@ -229,6 +228,21 @@ class Validate
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check numeric validity
|
||||||
|
*
|
||||||
|
* @param mixed $string to validate
|
||||||
|
* @return boolean Validity is ok or not
|
||||||
|
*/
|
||||||
|
public function isNumeric($string)
|
||||||
|
{
|
||||||
|
if (!is_numeric($string)) {
|
||||||
|
$this->error = $this->outputLang->trans('RequireValidNumeric');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check for boolean validity
|
* Check for boolean validity
|
||||||
*
|
*
|
||||||
|
|||||||
@ -70,6 +70,18 @@ abstract class DoliDB implements Database
|
|||||||
/** @var string */
|
/** @var string */
|
||||||
public $error;
|
public $error;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the DB prefix
|
||||||
|
*
|
||||||
|
* @return string The DB prefix
|
||||||
|
*/
|
||||||
|
public function prefix()
|
||||||
|
{
|
||||||
|
return (empty($this->prefix_db) ? MAIN_DB_PREFIX : $this->prefix_db);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Format a SQL IF
|
* Format a SQL IF
|
||||||
*
|
*
|
||||||
|
|||||||
@ -210,6 +210,8 @@ class DoliDBMysqli extends DoliDB
|
|||||||
{
|
{
|
||||||
dol_syslog(get_class($this)."::connect host=$host, port=$port, login=$login, passwd=--hidden--, name=$name", LOG_DEBUG);
|
dol_syslog(get_class($this)."::connect host=$host, port=$port, login=$login, passwd=--hidden--, name=$name", LOG_DEBUG);
|
||||||
|
|
||||||
|
//mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
|
||||||
|
|
||||||
// Can also be
|
// Can also be
|
||||||
// mysqli::init(); mysql::options(MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0'); mysqli::options(MYSQLI_OPT_CONNECT_TIMEOUT, 5);
|
// mysqli::init(); mysql::options(MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0'); mysqli::options(MYSQLI_OPT_CONNECT_TIMEOUT, 5);
|
||||||
// return mysqli::real_connect($host, $user, $pass, $db, $port);
|
// return mysqli::real_connect($host, $user, $pass, $db, $port);
|
||||||
@ -255,6 +257,8 @@ class DoliDBMysqli extends DoliDB
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute a SQL request and return the resultset
|
* Execute a SQL request and return the resultset
|
||||||
*
|
*
|
||||||
@ -288,11 +292,16 @@ class DoliDBMysqli extends DoliDB
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$this->database_name) {
|
try {
|
||||||
// Ordre SQL ne necessitant pas de connexion a une base (exemple: CREATE DATABASE)
|
if (!$this->database_name) {
|
||||||
$ret = $this->db->query($query, $result_mode);
|
// Ordre SQL ne necessitant pas de connexion a une base (exemple: CREATE DATABASE)
|
||||||
} else {
|
$ret = $this->db->query($query, $result_mode);
|
||||||
$ret = $this->db->query($query, $result_mode);
|
} else {
|
||||||
|
$ret = $this->db->query($query, $result_mode);
|
||||||
|
}
|
||||||
|
} catch (Exception $e) {
|
||||||
|
dol_syslog(get_class($this)."::query Exception in query instead of returning an error: ".$e->getMessage(), LOG_ERR);
|
||||||
|
$ret = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!preg_match("/^COMMIT/i", $query) && !preg_match("/^ROLLBACK/i", $query)) {
|
if (!preg_match("/^COMMIT/i", $query) && !preg_match("/^ROLLBACK/i", $query)) {
|
||||||
|
|||||||
@ -57,6 +57,40 @@ function contact_prepare_head(Contact $object)
|
|||||||
$head[$tab][2] = 'perso';
|
$head[$tab][2] = 'perso';
|
||||||
$tab++;
|
$tab++;
|
||||||
|
|
||||||
|
if (!empty($conf->projet->enabled) && (!empty($user->rights->projet->lire))) {
|
||||||
|
$nbProject = 0;
|
||||||
|
// Enable caching of thirdrparty count projects
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/memory.lib.php';
|
||||||
|
$cachekey = 'count_projects_contact_'.$object->id;
|
||||||
|
$dataretrieved = dol_getcache($cachekey);
|
||||||
|
|
||||||
|
if (!is_null($dataretrieved)) {
|
||||||
|
$nbProject = $dataretrieved;
|
||||||
|
} else {
|
||||||
|
$sql = 'SELECT COUNT(n.rowid) as nb';
|
||||||
|
$sql .= ' FROM '.MAIN_DB_PREFIX.'projet as n';
|
||||||
|
$sql .= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact as cc ON (n.rowid = cc.element_id)';
|
||||||
|
$sql .= ' WHERE cc.fk_socpeople = '.((int) $object->id);
|
||||||
|
$sql .= ' AND cc.fk_c_type_contact IN (SELECT rowid FROM '.MAIN_DB_PREFIX.'c_type_contact WHERE element="project" AND source="external")';
|
||||||
|
$sql .= ' AND n.entity IN ('.getEntity('project').')';
|
||||||
|
$resql = $db->query($sql);
|
||||||
|
if ($resql) {
|
||||||
|
$obj = $db->fetch_object($resql);
|
||||||
|
$nbProject = $obj->nb;
|
||||||
|
} else {
|
||||||
|
dol_print_error($db);
|
||||||
|
}
|
||||||
|
dol_setcache($cachekey, $nbProject, 120); // If setting cache fails, this is not a problem, so we do not test result.
|
||||||
|
}
|
||||||
|
$head[$tab][0] = DOL_URL_ROOT.'/contact/project.php?id='.$object->id;
|
||||||
|
$head[$tab][1] = $langs->trans("Projects");
|
||||||
|
if ($nbProject > 0) {
|
||||||
|
$head[$tab][1] .= '<span class="badge marginleftonlyshort">'.$nbProject.'</span>';
|
||||||
|
}
|
||||||
|
$head[$tab][2] = 'project';
|
||||||
|
$tab++;
|
||||||
|
}
|
||||||
|
|
||||||
// Related items
|
// Related items
|
||||||
if (!empty($conf->commande->enabled) || !empty($conf->propal->enabled) || !empty($conf->facture->enabled) || !empty($conf->ficheinter->enabled) || (!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) || !empty($conf->supplier_order->enabled) || !empty($conf->supplier_invoice->enabled)) {
|
if (!empty($conf->commande->enabled) || !empty($conf->propal->enabled) || !empty($conf->facture->enabled) || !empty($conf->ficheinter->enabled) || (!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) || !empty($conf->supplier_order->enabled) || !empty($conf->supplier_invoice->enabled)) {
|
||||||
$head[$tab][0] = DOL_URL_ROOT.'/contact/consumption.php?id='.$object->id;
|
$head[$tab][0] = DOL_URL_ROOT.'/contact/consumption.php?id='.$object->id;
|
||||||
@ -117,3 +151,131 @@ function contact_prepare_head(Contact $object)
|
|||||||
|
|
||||||
return $head;
|
return $head;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show html area for list of projects
|
||||||
|
*
|
||||||
|
* @param Conf $conf Object conf
|
||||||
|
* @param Translate $langs Object langs
|
||||||
|
* @param DoliDB $db Database handler
|
||||||
|
* @param Object $object Third party object
|
||||||
|
* @param string $backtopage Url to go once contact is created
|
||||||
|
* @param int $nocreatelink 1=Hide create project link
|
||||||
|
* @param string $morehtmlright More html on right of title
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
function show_contacts_projects($conf, $langs, $db, $object, $backtopage = '', $nocreatelink = 0, $morehtmlright = '')
|
||||||
|
{
|
||||||
|
global $user;
|
||||||
|
|
||||||
|
$i = -1;
|
||||||
|
|
||||||
|
if (!empty($conf->projet->enabled) && $user->rights->projet->lire) {
|
||||||
|
$langs->load("projects");
|
||||||
|
|
||||||
|
$newcardbutton = '';
|
||||||
|
if (!empty($conf->projet->enabled) && $user->rights->projet->creer && empty($nocreatelink)) {
|
||||||
|
$newcardbutton .= dolGetButtonTitle($langs->trans('AddProject'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/projet/card.php?socid='.$object->id.'&action=create&backtopage='.urlencode($backtopage));
|
||||||
|
}
|
||||||
|
|
||||||
|
print "\n";
|
||||||
|
print load_fiche_titre($langs->trans("ProjectsHavingThisContact"), $newcardbutton.$morehtmlright, '');
|
||||||
|
print '<div class="div-table-responsive">';
|
||||||
|
print "\n".'<table class="noborder" width=100%>';
|
||||||
|
|
||||||
|
$sql = 'SELECT p.rowid as id, p.entity, p.title, p.ref, p.public, p.dateo as do, p.datee as de, p.fk_statut as status, p.fk_opp_status, p.opp_amount, p.opp_percent, p.tms as date_update, p.budget_amount';
|
||||||
|
$sql .= ', cls.code as opp_status_code, ctc.libelle';
|
||||||
|
$sql .= ' FROM '.MAIN_DB_PREFIX.'projet as p';
|
||||||
|
$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_lead_status as cls on p.fk_opp_status = cls.rowid';
|
||||||
|
$sql .= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact as cc ON (p.rowid = cc.element_id)';
|
||||||
|
$sql .= ' INNER JOIN '.MAIN_DB_PREFIX.'c_type_contact as ctc ON (ctc.rowid = cc.fk_c_type_contact)';
|
||||||
|
$sql .= ' WHERE cc.fk_socpeople = '.((int) $object->id);
|
||||||
|
$sql .= ' AND ctc.element="project" AND ctc.source="external"';
|
||||||
|
$sql .= ' AND p.entity IN ('.getEntity('project').')';
|
||||||
|
$sql .= ' ORDER BY p.dateo DESC';
|
||||||
|
|
||||||
|
$result = $db->query($sql);
|
||||||
|
if ($result) {
|
||||||
|
$num = $db->num_rows($result);
|
||||||
|
|
||||||
|
print '<tr class="liste_titre">';
|
||||||
|
print '<td>'.$langs->trans("Ref").'</td>';
|
||||||
|
print '<td>'.$langs->trans("Name").'</td>';
|
||||||
|
print '<td>'.$langs->trans("ContactType").'</td>';
|
||||||
|
print '<td class="center">'.$langs->trans("DateStart").'</td>';
|
||||||
|
print '<td class="center">'.$langs->trans("DateEnd").'</td>';
|
||||||
|
print '<td class="right">'.$langs->trans("OpportunityAmountShort").'</td>';
|
||||||
|
print '<td class="center">'.$langs->trans("OpportunityStatusShort").'</td>';
|
||||||
|
print '<td class="right">'.$langs->trans("OpportunityProbabilityShort").'</td>';
|
||||||
|
print '<td class="right">'.$langs->trans("Status").'</td>';
|
||||||
|
print '</tr>';
|
||||||
|
|
||||||
|
if ($num > 0) {
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
|
||||||
|
|
||||||
|
$projecttmp = new Project($db);
|
||||||
|
|
||||||
|
$i = 0;
|
||||||
|
|
||||||
|
while ($i < $num) {
|
||||||
|
$obj = $db->fetch_object($result);
|
||||||
|
$projecttmp->fetch($obj->id);
|
||||||
|
|
||||||
|
// To verify role of users
|
||||||
|
$userAccess = $projecttmp->restrictedProjectArea($user);
|
||||||
|
|
||||||
|
if ($user->rights->projet->lire && $userAccess > 0) {
|
||||||
|
print '<tr class="oddeven">';
|
||||||
|
|
||||||
|
// Ref
|
||||||
|
print '<td>';
|
||||||
|
print $projecttmp->getNomUrl(1);
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
|
// Label
|
||||||
|
print '<td>'.$obj->title.'</td>';
|
||||||
|
print '<td>'.$obj->libelle.'</td>';
|
||||||
|
// Date start
|
||||||
|
print '<td class="center">'.dol_print_date($db->jdate($obj->do), "day").'</td>';
|
||||||
|
// Date end
|
||||||
|
print '<td class="center">'.dol_print_date($db->jdate($obj->de), "day").'</td>';
|
||||||
|
// Opp amount
|
||||||
|
print '<td class="right">';
|
||||||
|
if ($obj->opp_status_code) {
|
||||||
|
print price($obj->opp_amount, 1, '', 1, -1, -1, '');
|
||||||
|
}
|
||||||
|
print '</td>';
|
||||||
|
// Opp status
|
||||||
|
print '<td class="center">';
|
||||||
|
if ($obj->opp_status_code) {
|
||||||
|
print $langs->trans("OppStatus".$obj->opp_status_code);
|
||||||
|
}
|
||||||
|
print '</td>';
|
||||||
|
// Opp percent
|
||||||
|
print '<td class="right">';
|
||||||
|
if ($obj->opp_percent) {
|
||||||
|
print price($obj->opp_percent, 1, '', 1, 0).'%';
|
||||||
|
}
|
||||||
|
print '</td>';
|
||||||
|
// Status
|
||||||
|
print '<td class="right">'.$projecttmp->getLibStatut(5).'</td>';
|
||||||
|
|
||||||
|
print '</tr>';
|
||||||
|
}
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
print '<tr class="oddeven"><td colspan="8"><span class="opacitymedium">'.$langs->trans("None").'</span></td></tr>';
|
||||||
|
}
|
||||||
|
$db->free($result);
|
||||||
|
} else {
|
||||||
|
dol_print_error($db);
|
||||||
|
}
|
||||||
|
print "</table>";
|
||||||
|
print '</div>';
|
||||||
|
|
||||||
|
print "<br>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
return $i;
|
||||||
|
}
|
||||||
|
|||||||
@ -17,6 +17,7 @@
|
|||||||
* Copyright (C) 2019 Thibault Foucart <support@ptibogxiv.net>
|
* Copyright (C) 2019 Thibault Foucart <support@ptibogxiv.net>
|
||||||
* Copyright (C) 2020 Open-Dsi <support@open-dsi.fr>
|
* Copyright (C) 2020 Open-Dsi <support@open-dsi.fr>
|
||||||
* Copyright (C) 2021 Gauthier VERDOL <gauthier.verdol@atm-consulting.fr>
|
* Copyright (C) 2021 Gauthier VERDOL <gauthier.verdol@atm-consulting.fr>
|
||||||
|
* Copyright (C) 2022 Anthony Berton <anthony.berton@bb2a.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
|
||||||
* 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
|
||||||
@ -782,7 +783,7 @@ function checkVal($out = '', $check = 'alphanohtml', $filter = null, $options =
|
|||||||
// keep lines feed
|
// keep lines feed
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'alphawithlgt': // No " and no ../ but we keep balanced < > tags with no special chars inside. Can be used for email string like "Name <email>"
|
case 'alphawithlgt': // No " and no ../ but we keep balanced < > tags with no special chars inside. Can be used for email string like "Name <email>". Less secured than 'alphanohtml'
|
||||||
if (!is_array($out)) {
|
if (!is_array($out)) {
|
||||||
$out = trim($out);
|
$out = trim($out);
|
||||||
do {
|
do {
|
||||||
@ -1231,8 +1232,8 @@ function dol_string_unaccent($str)
|
|||||||
*
|
*
|
||||||
* @param string $str String to clean
|
* @param string $str String to clean
|
||||||
* @param string $newstr String to replace forbidden chars with
|
* @param string $newstr String to replace forbidden chars with
|
||||||
* @param array|string $badcharstoreplace List of forbidden characters to replace
|
* @param array|string $badcharstoreplace Array of forbidden characters to replace. Use '' to keep default list.
|
||||||
* @param array|string $badcharstoremove List of forbidden characters to remove
|
* @param array|string $badcharstoremove Array of forbidden characters to remove. Use '' to keep default list.
|
||||||
* @return string Cleaned string
|
* @return string Cleaned string
|
||||||
*
|
*
|
||||||
* @see dol_sanitizeFilename(), dol_string_unaccent(), dol_string_nounprintableascii()
|
* @see dol_sanitizeFilename(), dol_string_unaccent(), dol_string_nounprintableascii()
|
||||||
@ -1544,6 +1545,7 @@ function dol_syslog($message, $level = LOG_INFO, $ident = 0, $suffixinfilename =
|
|||||||
// This is when PHP session is ran outside a web server, like from Linux command line (Not always defined, but usefull if OS defined it).
|
// This is when PHP session is ran outside a web server, like from Linux command line (Not always defined, but usefull if OS defined it).
|
||||||
$data['ip'] = '???@'.$_SERVER['LOGNAME'];
|
$data['ip'] = '???@'.$_SERVER['LOGNAME'];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Loop on each log handler and send output
|
// Loop on each log handler and send output
|
||||||
foreach ($conf->loghandlers as $loghandlerinstance) {
|
foreach ($conf->loghandlers as $loghandlerinstance) {
|
||||||
if ($restricttologhandler && $loghandlerinstance->code != $restricttologhandler) {
|
if ($restricttologhandler && $loghandlerinstance->code != $restricttologhandler) {
|
||||||
@ -1664,7 +1666,11 @@ function dol_get_fiche_head($links = array(), $active = '', $title = '', $notab
|
|||||||
$limittitle = 30;
|
$limittitle = 30;
|
||||||
$out .= '<a class="tabTitle">';
|
$out .= '<a class="tabTitle">';
|
||||||
if ($picto) {
|
if ($picto) {
|
||||||
$out .= img_picto($title, ($pictoisfullpath ? '' : 'object_').$picto, '', $pictoisfullpath, 0, 0, '', 'imgTabTitle').' ';
|
$noprefix = $pictoisfullpath;
|
||||||
|
if (strpos($picto, 'fontawesome_') !== false) {
|
||||||
|
$noprefix = 1;
|
||||||
|
}
|
||||||
|
$out .= img_picto($title, ($noprefix ? '' : 'object_').$picto, '', $pictoisfullpath, 0, 0, '', 'imgTabTitle').' ';
|
||||||
}
|
}
|
||||||
$out .= '<span class="tabTitleText">'.dol_escape_htmltag(dol_trunc($title, $limittitle)).'</span>';
|
$out .= '<span class="tabTitleText">'.dol_escape_htmltag(dol_trunc($title, $limittitle)).'</span>';
|
||||||
$out .= '</a>';
|
$out .= '</a>';
|
||||||
@ -1897,7 +1903,7 @@ function dol_banner_tab($object, $paramid, $morehtml = '', $shownav = 1, $fieldi
|
|||||||
|
|
||||||
if ($object->element == 'product') {
|
if ($object->element == 'product') {
|
||||||
$width = 80;
|
$width = 80;
|
||||||
$cssclass = 'photoref';
|
$cssclass = 'photowithmargin photoref';
|
||||||
$showimage = $object->is_photo_available($conf->product->multidir_output[$entity]);
|
$showimage = $object->is_photo_available($conf->product->multidir_output[$entity]);
|
||||||
$maxvisiblephotos = (isset($conf->global->PRODUCT_MAX_VISIBLE_PHOTO) ? $conf->global->PRODUCT_MAX_VISIBLE_PHOTO : 5);
|
$maxvisiblephotos = (isset($conf->global->PRODUCT_MAX_VISIBLE_PHOTO) ? $conf->global->PRODUCT_MAX_VISIBLE_PHOTO : 5);
|
||||||
if ($conf->browser->layout == 'phone') {
|
if ($conf->browser->layout == 'phone') {
|
||||||
@ -2019,10 +2025,14 @@ function dol_banner_tab($object, $paramid, $morehtml = '', $shownav = 1, $fieldi
|
|||||||
$width = 14;
|
$width = 14;
|
||||||
$cssclass = 'photorefcenter';
|
$cssclass = 'photorefcenter';
|
||||||
$picto = $object->picto;
|
$picto = $object->picto;
|
||||||
|
$prefix = 'object_';
|
||||||
if ($object->element == 'project' && !$object->public) {
|
if ($object->element == 'project' && !$object->public) {
|
||||||
$picto = 'project'; // instead of projectpub
|
$picto = 'project'; // instead of projectpub
|
||||||
}
|
}
|
||||||
$nophoto = img_picto('No photo', 'object_'.$picto);
|
if (strpos($picto, 'fontawesome_') !== false) {
|
||||||
|
$prefix = '';
|
||||||
|
}
|
||||||
|
$nophoto = img_picto('No photo', $prefix.$picto);
|
||||||
}
|
}
|
||||||
$morehtmlleft .= '<!-- No photo to show -->';
|
$morehtmlleft .= '<!-- No photo to show -->';
|
||||||
$morehtmlleft .= '<div class="floatleft inline-block valignmiddle divphotoref"><div class="photoref">';
|
$morehtmlleft .= '<div class="floatleft inline-block valignmiddle divphotoref"><div class="photoref">';
|
||||||
@ -2880,15 +2890,15 @@ function dol_print_socialnetworks($value, $cid, $socid, $type, $dictsocialnetwor
|
|||||||
// Use dictionary definition for picto $dictsocialnetworks[$type]['icon']
|
// Use dictionary definition for picto $dictsocialnetworks[$type]['icon']
|
||||||
$htmllink .= '<span class="fa paddingright '.($dictsocialnetworks[$type]['icon'] ? $dictsocialnetworks[$type]['icon'] : 'fa-link').'"></span>';
|
$htmllink .= '<span class="fa paddingright '.($dictsocialnetworks[$type]['icon'] ? $dictsocialnetworks[$type]['icon'] : 'fa-link').'"></span>';
|
||||||
if ($type == 'skype') {
|
if ($type == 'skype') {
|
||||||
$htmllink .= $value;
|
$htmllink .= dol_escape_htmltag($value);
|
||||||
$htmllink .= ' ';
|
$htmllink .= ' ';
|
||||||
$htmllink .= '<a href="skype:';
|
$htmllink .= '<a href="skype:';
|
||||||
$htmllink .= $value;
|
$htmllink .= dol_string_nospecial($value, '_', '', array('@'));
|
||||||
$htmllink .= '?call" alt="'.$langs->trans("Call").' '.$value.'" title="'.$langs->trans("Call").' '.$value.'">';
|
$htmllink .= '?call" alt="'.$langs->trans("Call").' '.$value.'" title="'.dol_escape_htmltag($langs->trans("Call").' '.$value).'">';
|
||||||
$htmllink .= '<img src="'.DOL_URL_ROOT.'/theme/common/skype_callbutton.png" border="0">';
|
$htmllink .= '<img src="'.DOL_URL_ROOT.'/theme/common/skype_callbutton.png" border="0">';
|
||||||
$htmllink .= '</a><a href="skype:';
|
$htmllink .= '</a><a href="skype:';
|
||||||
$htmllink .= $value;
|
$htmllink .= dol_string_nospecial($value, '_', '', array('@'));
|
||||||
$htmllink .= '?chat" alt="'.$langs->trans("Chat").' '.$value.'" title="'.$langs->trans("Chat").' '.$value.'">';
|
$htmllink .= '?chat" alt="'.$langs->trans("Chat").' '.$value.'" title="'.dol_escape_htmltag($langs->trans("Chat").' '.$value).'">';
|
||||||
$htmllink .= '<img class="paddingleft" src="'.DOL_URL_ROOT.'/theme/common/skype_chatbutton.png" border="0">';
|
$htmllink .= '<img class="paddingleft" src="'.DOL_URL_ROOT.'/theme/common/skype_chatbutton.png" border="0">';
|
||||||
$htmllink .= '</a>';
|
$htmllink .= '</a>';
|
||||||
if (($cid || $socid) && !empty($conf->agenda->enabled) && $user->rights->agenda->myactions->create) {
|
if (($cid || $socid) && !empty($conf->agenda->enabled) && $user->rights->agenda->myactions->create) {
|
||||||
@ -2902,9 +2912,9 @@ function dol_print_socialnetworks($value, $cid, $socid, $type, $dictsocialnetwor
|
|||||||
} else {
|
} else {
|
||||||
if (!empty($dictsocialnetworks[$type]['url'])) {
|
if (!empty($dictsocialnetworks[$type]['url'])) {
|
||||||
$link = str_replace('{socialid}', $value, $dictsocialnetworks[$type]['url']);
|
$link = str_replace('{socialid}', $value, $dictsocialnetworks[$type]['url']);
|
||||||
$htmllink .= ' <a href="'.$link.'" target="_blank" rel="noopener noreferrer">'.$value.'</a>';
|
$htmllink .= ' <a href="'.$link.'" target="_blank" rel="noopener noreferrer">'.dol_escape_htmltag($value).'</a>';
|
||||||
} else {
|
} else {
|
||||||
$htmllink .= $value;
|
$htmllink .= dol_escape_htmltag($value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$htmllink .= '</div>';
|
$htmllink .= '</div>';
|
||||||
@ -2915,6 +2925,38 @@ function dol_print_socialnetworks($value, $cid, $socid, $type, $dictsocialnetwor
|
|||||||
return $htmllink;
|
return $htmllink;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Format profIDs according to country
|
||||||
|
*
|
||||||
|
* @param string $profID Value of profID to format
|
||||||
|
* @param string $profIDtype Type of profID to format ('1', '2', '3', '4', '5', '6' or 'VAT')
|
||||||
|
* @param string $countrycode Country code to use for formatting
|
||||||
|
* @param int $addcpButton Add button to copy to clipboard (1 => show only on hoover ; 2 => always display )
|
||||||
|
* @param string $separ Separation between numbers for a better visibility example : xxx xxx xxx xxxxx
|
||||||
|
* @return string Formated profID
|
||||||
|
*/
|
||||||
|
function dol_print_profids($profID, $profIDtype, $countrycode = '', $addcpButton = 1, $separ = ' ')
|
||||||
|
{
|
||||||
|
global $mysoc;
|
||||||
|
|
||||||
|
if (empty($profID) || empty($profIDtype)) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
if (empty($countrycode)) $countrycode = $mysoc->country_code;
|
||||||
|
$newProfID = $profID;
|
||||||
|
$id = substr($profIDtype, -1);
|
||||||
|
$ret = '';
|
||||||
|
if (strtoupper($countrycode) == 'FR') {
|
||||||
|
// France
|
||||||
|
if ($id == 1 && dol_strlen($newProfID) == 9) $newProfID = substr($newProfID, 0, 3).$separ.substr($newProfID, 3, 3).$separ.substr($newProfID, 6, 3);
|
||||||
|
if ($id == 2 && dol_strlen($newProfID) == 14) $newProfID = substr($newProfID, 0, 3).$separ.substr($newProfID, 3, 3).$separ.substr($newProfID, 6, 3).$separ.substr($newProfID, 9, 5);
|
||||||
|
if ($profIDtype === 'VAT' && dol_strlen($newProfID) == 13) $newProfID = substr($newProfID, 0, 4).$separ.substr($newProfID, 4, 3).$separ.substr($newProfID, 7, 3).$separ.substr($newProfID, 10, 3);
|
||||||
|
}
|
||||||
|
if (!empty($addcpButton)) $ret = showValueWithClipboardCPButton(dol_escape_htmltag($profID), ($addcpButton == 1 ? 1 : 0), $newProfID);
|
||||||
|
else $ret = $newProfID;
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Format phone numbers according to country
|
* Format phone numbers according to country
|
||||||
*
|
*
|
||||||
@ -3607,6 +3649,7 @@ function dol_trunc($string, $size = 40, $trunc = 'right', $stringencoding = 'UTF
|
|||||||
* Example: picto.png if picto.png is stored into htdocs/theme/mytheme/img
|
* Example: picto.png if picto.png is stored into htdocs/theme/mytheme/img
|
||||||
* Example: picto.png@mymodule if picto.png is stored into htdocs/mymodule/img
|
* Example: picto.png@mymodule if picto.png is stored into htdocs/mymodule/img
|
||||||
* Example: /mydir/mysubdir/picto.png if picto.png is stored into htdocs/mydir/mysubdir (pictoisfullpath must be set to 1)
|
* Example: /mydir/mysubdir/picto.png if picto.png is stored into htdocs/mydir/mysubdir (pictoisfullpath must be set to 1)
|
||||||
|
* Example: fontawesome_envelope-open-text_fas_red_1em if you want to use fontaweseome icons: fontawesome_<icon-name>_<style>_<color>_<size> (only icon-name is mandatory)
|
||||||
* @param string $moreatt Add more attribute on img tag (For example 'class="pictofixedwidth"')
|
* @param string $moreatt Add more attribute on img tag (For example 'class="pictofixedwidth"')
|
||||||
* @param boolean|int $pictoisfullpath If true or 1, image path is a full path
|
* @param boolean|int $pictoisfullpath If true or 1, image path is a full path
|
||||||
* @param int $srconly Return only content of the src attribute of img.
|
* @param int $srconly Return only content of the src attribute of img.
|
||||||
@ -3638,6 +3681,40 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$pictowithouttext = preg_replace('/(\.png|\.gif|\.svg)$/', '', $picto);
|
$pictowithouttext = preg_replace('/(\.png|\.gif|\.svg)$/', '', $picto);
|
||||||
|
|
||||||
|
if (strpos($pictowithouttext, 'fontawesome_') !== false) {
|
||||||
|
$pictowithouttext = explode('_', $pictowithouttext);
|
||||||
|
$marginleftonlyshort = 0;
|
||||||
|
|
||||||
|
$fakey = 'fa-'.$pictowithouttext[1];
|
||||||
|
$fa = $pictowithouttext[2] ? $pictowithouttext[2] : 'fa';
|
||||||
|
$facolor = $pictowithouttext[3] ? $pictowithouttext[3] : '';
|
||||||
|
$fasize = $pictowithouttext[4] ? $pictowithouttext[4] : '';
|
||||||
|
|
||||||
|
// This snippet only needed since function img_edit accepts only one additional parameter: no separate one for css only.
|
||||||
|
// class/style need to be extracted to avoid duplicate class/style validation errors when $moreatt is added to the end of the attributes.
|
||||||
|
$morestyle = '';
|
||||||
|
$reg = array();
|
||||||
|
if (preg_match('/class="([^"]+)"/', $moreatt, $reg)) {
|
||||||
|
$morecss .= ($morecss ? ' ' : '').$reg[1];
|
||||||
|
$moreatt = str_replace('class="'.$reg[1].'"', '', $moreatt);
|
||||||
|
}
|
||||||
|
if (preg_match('/style="([^"]+)"/', $moreatt, $reg)) {
|
||||||
|
$morestyle = $reg[1];
|
||||||
|
$moreatt = str_replace('style="'.$reg[1].'"', '', $moreatt);
|
||||||
|
}
|
||||||
|
$moreatt = trim($moreatt);
|
||||||
|
|
||||||
|
$enabledisablehtml = '<span class="'.$fa.' '.$fakey.($marginleftonlyshort ? ($marginleftonlyshort == 1 ? ' marginleftonlyshort' : ' marginleftonly') : '');
|
||||||
|
$enabledisablehtml .= ($morecss ? ' '.$morecss : '').'" style="'.($fasize ? ('font-size: '.$fasize.';') : '').($facolor ? (' color: '.$facolor.';') : '').($morestyle ? ' '.$morestyle : '').'"'.(($notitle || empty($titlealt)) ? '' : ' title="'.dol_escape_htmltag($titlealt).'"').($moreatt ? ' '.$moreatt : '').'>';
|
||||||
|
/*if (!empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) {
|
||||||
|
$enabledisablehtml .= $titlealt;
|
||||||
|
}*/
|
||||||
|
$enabledisablehtml .= '</span>';
|
||||||
|
|
||||||
|
return $enabledisablehtml;
|
||||||
|
}
|
||||||
|
|
||||||
$pictowithouttext = str_replace('object_', '', $pictowithouttext);
|
$pictowithouttext = str_replace('object_', '', $pictowithouttext);
|
||||||
if (empty($srconly) && in_array($pictowithouttext, array(
|
if (empty($srconly) && in_array($pictowithouttext, array(
|
||||||
'1downarrow', '1uparrow', '1leftarrow', '1rightarrow', '1uparrow_selected', '1downarrow_selected', '1leftarrow_selected', '1rightarrow_selected',
|
'1downarrow', '1uparrow', '1leftarrow', '1rightarrow', '1uparrow_selected', '1downarrow_selected', '1leftarrow_selected', '1rightarrow_selected',
|
||||||
@ -6951,10 +7028,15 @@ function getCommonSubstitutionArray($outputlangs, $onlykey = 0, $exclude = null,
|
|||||||
'__USER_ID__' => (string) $user->id,
|
'__USER_ID__' => (string) $user->id,
|
||||||
'__USER_LOGIN__' => (string) $user->login,
|
'__USER_LOGIN__' => (string) $user->login,
|
||||||
'__USER_EMAIL__' => (string) $user->email,
|
'__USER_EMAIL__' => (string) $user->email,
|
||||||
|
'__USER_PHONE__' => (string) dol_print_phone($user->office_phone),
|
||||||
|
'__USER_PHONEPRO__' => (string) dol_print_phone($user->user_mobile),
|
||||||
|
'__USER_PHONEMOBILE__' => (string) dol_print_phone($user->personal_mobile),
|
||||||
|
'__USER_FAX__' => (string) $user->office_fax,
|
||||||
'__USER_LASTNAME__' => (string) $user->lastname,
|
'__USER_LASTNAME__' => (string) $user->lastname,
|
||||||
'__USER_FIRSTNAME__' => (string) $user->firstname,
|
'__USER_FIRSTNAME__' => (string) $user->firstname,
|
||||||
'__USER_FULLNAME__' => (string) $user->getFullName($outputlangs),
|
'__USER_FULLNAME__' => (string) $user->getFullName($outputlangs),
|
||||||
'__USER_SUPERVISOR_ID__' => (string) ($user->fk_user ? $user->fk_user : '0'),
|
'__USER_SUPERVISOR_ID__' => (string) ($user->fk_user ? $user->fk_user : '0'),
|
||||||
|
'__USER_JOB__' => (string) $user->job,
|
||||||
'__USER_REMOTE_IP__' => (string) getUserRemoteIP()
|
'__USER_REMOTE_IP__' => (string) getUserRemoteIP()
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@ -6963,8 +7045,8 @@ function getCommonSubstitutionArray($outputlangs, $onlykey = 0, $exclude = null,
|
|||||||
$substitutionarray = array_merge($substitutionarray, array(
|
$substitutionarray = array_merge($substitutionarray, array(
|
||||||
'__MYCOMPANY_NAME__' => $mysoc->name,
|
'__MYCOMPANY_NAME__' => $mysoc->name,
|
||||||
'__MYCOMPANY_EMAIL__' => $mysoc->email,
|
'__MYCOMPANY_EMAIL__' => $mysoc->email,
|
||||||
'__MYCOMPANY_PHONE__' => $mysoc->phone,
|
'__MYCOMPANY_PHONE__' => dol_print_phone($mysoc->phone),
|
||||||
'__MYCOMPANY_FAX__' => $mysoc->fax,
|
'__MYCOMPANY_FAX__' => dol_print_phone($mysoc->fax),
|
||||||
'__MYCOMPANY_PROFID1__' => $mysoc->idprof1,
|
'__MYCOMPANY_PROFID1__' => $mysoc->idprof1,
|
||||||
'__MYCOMPANY_PROFID2__' => $mysoc->idprof2,
|
'__MYCOMPANY_PROFID2__' => $mysoc->idprof2,
|
||||||
'__MYCOMPANY_PROFID3__' => $mysoc->idprof3,
|
'__MYCOMPANY_PROFID3__' => $mysoc->idprof3,
|
||||||
@ -7025,6 +7107,19 @@ function getCommonSubstitutionArray($outputlangs, $onlykey = 0, $exclude = null,
|
|||||||
/*$substitutionarray['__MEMBER_NOTE_PUBLIC__'] = '__MEMBER_NOTE_PUBLIC__';
|
/*$substitutionarray['__MEMBER_NOTE_PUBLIC__'] = '__MEMBER_NOTE_PUBLIC__';
|
||||||
$substitutionarray['__MEMBER_NOTE_PRIVATE__'] = '__MEMBER_NOTE_PRIVATE__';*/
|
$substitutionarray['__MEMBER_NOTE_PRIVATE__'] = '__MEMBER_NOTE_PRIVATE__';*/
|
||||||
}
|
}
|
||||||
|
// add variables subtitutions ticket
|
||||||
|
if (!empty($conf->ticket->enabled) && (!is_object($object) || $object->element == 'ticket')) {
|
||||||
|
$substitutionarray['__TICKET_TRACKID__'] = '__TICKET_TRACKID__';
|
||||||
|
$substitutionarray['__TICKET_SUBJECT__'] = '__TICKET_SUBJECT__';
|
||||||
|
$substitutionarray['__TICKET_TYPE__'] = '__TICKET_TYPE__';
|
||||||
|
$substitutionarray['__TICKET_SEVERITY__'] = '__TICKET_SEVERITY__';
|
||||||
|
$substitutionarray['__TICKET_CATEGORY__'] = '__TICKET_CATEGORY__';
|
||||||
|
$substitutionarray['__TICKET_ANALYTIC_CODE__'] = '__TICKET_ANALYTIC_CODE__';
|
||||||
|
$substitutionarray['__TICKET_MESSAGE__'] = '__TICKET_MESSAGE__';
|
||||||
|
$substitutionarray['__TICKET_PROGRESSION__'] = '__TICKET_PROGRESSION__';
|
||||||
|
$substitutionarray['__TICKET_USER_ASSIGN__'] = '__TICKET_USER_ASSIGN__';
|
||||||
|
}
|
||||||
|
|
||||||
if (!empty($conf->recruitment->enabled) && (!is_object($object) || $object->element == 'candidature')) {
|
if (!empty($conf->recruitment->enabled) && (!is_object($object) || $object->element == 'candidature')) {
|
||||||
$substitutionarray['__CANDIDATE_FULLNAME__'] = '__CANDIDATE_FULLNAME__';
|
$substitutionarray['__CANDIDATE_FULLNAME__'] = '__CANDIDATE_FULLNAME__';
|
||||||
$substitutionarray['__CANDIDATE_FIRSTNAME__'] = '__CANDIDATE_FIRSTNAME__';
|
$substitutionarray['__CANDIDATE_FIRSTNAME__'] = '__CANDIDATE_FIRSTNAME__';
|
||||||
@ -7112,9 +7207,9 @@ function getCommonSubstitutionArray($outputlangs, $onlykey = 0, $exclude = null,
|
|||||||
$substitutionarray['__MEMBER_PHOTO__'] = (isset($object->photo) ? $object->photo : '');
|
$substitutionarray['__MEMBER_PHOTO__'] = (isset($object->photo) ? $object->photo : '');
|
||||||
$substitutionarray['__MEMBER_LOGIN__'] = (isset($object->login) ? $object->login : '');
|
$substitutionarray['__MEMBER_LOGIN__'] = (isset($object->login) ? $object->login : '');
|
||||||
$substitutionarray['__MEMBER_PASSWORD__'] = (isset($object->pass) ? $object->pass : '');
|
$substitutionarray['__MEMBER_PASSWORD__'] = (isset($object->pass) ? $object->pass : '');
|
||||||
$substitutionarray['__MEMBER_PHONE__'] = (isset($object->phone) ? $object->phone : '');
|
$substitutionarray['__MEMBER_PHONE__'] = (isset($object->phone) ? dol_print_phone($object->phone) : '');
|
||||||
$substitutionarray['__MEMBER_PHONEPRO__'] = (isset($object->phone_perso) ? $object->phone_perso : '');
|
$substitutionarray['__MEMBER_PHONEPRO__'] = (isset($object->phone_perso) ? dol_print_phone($object->phone_perso) : '');
|
||||||
$substitutionarray['__MEMBER_PHONEMOBILE__'] = (isset($object->phone_mobile) ? $object->phone_mobile : '');
|
$substitutionarray['__MEMBER_PHONEMOBILE__'] = (isset($object->phone_mobile) ? dol_print_phone($object->phone_mobile) : '');
|
||||||
$substitutionarray['__MEMBER_TYPE__'] = (isset($object->type) ? $object->type : '');
|
$substitutionarray['__MEMBER_TYPE__'] = (isset($object->type) ? $object->type : '');
|
||||||
$substitutionarray['__MEMBER_FIRST_SUBSCRIPTION_DATE__'] = dol_print_date($object->first_subscription_date, 'dayrfc');
|
$substitutionarray['__MEMBER_FIRST_SUBSCRIPTION_DATE__'] = dol_print_date($object->first_subscription_date, 'dayrfc');
|
||||||
$substitutionarray['__MEMBER_FIRST_SUBSCRIPTION_DATE_START__'] = dol_print_date($object->first_subscription_date_start, 'dayrfc');
|
$substitutionarray['__MEMBER_FIRST_SUBSCRIPTION_DATE_START__'] = dol_print_date($object->first_subscription_date_start, 'dayrfc');
|
||||||
@ -7131,8 +7226,8 @@ function getCommonSubstitutionArray($outputlangs, $onlykey = 0, $exclude = null,
|
|||||||
$substitutionarray['__THIRDPARTY_CODE_CLIENT__'] = (is_object($object) ? $object->code_client : '');
|
$substitutionarray['__THIRDPARTY_CODE_CLIENT__'] = (is_object($object) ? $object->code_client : '');
|
||||||
$substitutionarray['__THIRDPARTY_CODE_FOURNISSEUR__'] = (is_object($object) ? $object->code_fournisseur : '');
|
$substitutionarray['__THIRDPARTY_CODE_FOURNISSEUR__'] = (is_object($object) ? $object->code_fournisseur : '');
|
||||||
$substitutionarray['__THIRDPARTY_EMAIL__'] = (is_object($object) ? $object->email : '');
|
$substitutionarray['__THIRDPARTY_EMAIL__'] = (is_object($object) ? $object->email : '');
|
||||||
$substitutionarray['__THIRDPARTY_PHONE__'] = (is_object($object) ? $object->phone : '');
|
$substitutionarray['__THIRDPARTY_PHONE__'] = (is_object($object) ? dol_print_phone($object->phone) : '');
|
||||||
$substitutionarray['__THIRDPARTY_FAX__'] = (is_object($object) ? $object->fax : '');
|
$substitutionarray['__THIRDPARTY_FAX__'] = (is_object($object) ? dol_print_phone($object->fax) : '');
|
||||||
$substitutionarray['__THIRDPARTY_ADDRESS__'] = (is_object($object) ? $object->address : '');
|
$substitutionarray['__THIRDPARTY_ADDRESS__'] = (is_object($object) ? $object->address : '');
|
||||||
$substitutionarray['__THIRDPARTY_ZIP__'] = (is_object($object) ? $object->zip : '');
|
$substitutionarray['__THIRDPARTY_ZIP__'] = (is_object($object) ? $object->zip : '');
|
||||||
$substitutionarray['__THIRDPARTY_TOWN__'] = (is_object($object) ? $object->town : '');
|
$substitutionarray['__THIRDPARTY_TOWN__'] = (is_object($object) ? $object->town : '');
|
||||||
@ -7154,8 +7249,8 @@ function getCommonSubstitutionArray($outputlangs, $onlykey = 0, $exclude = null,
|
|||||||
$substitutionarray['__THIRDPARTY_CODE_CLIENT__'] = (is_object($object->thirdparty) ? $object->thirdparty->code_client : '');
|
$substitutionarray['__THIRDPARTY_CODE_CLIENT__'] = (is_object($object->thirdparty) ? $object->thirdparty->code_client : '');
|
||||||
$substitutionarray['__THIRDPARTY_CODE_FOURNISSEUR__'] = (is_object($object->thirdparty) ? $object->thirdparty->code_fournisseur : '');
|
$substitutionarray['__THIRDPARTY_CODE_FOURNISSEUR__'] = (is_object($object->thirdparty) ? $object->thirdparty->code_fournisseur : '');
|
||||||
$substitutionarray['__THIRDPARTY_EMAIL__'] = (is_object($object->thirdparty) ? $object->thirdparty->email : '');
|
$substitutionarray['__THIRDPARTY_EMAIL__'] = (is_object($object->thirdparty) ? $object->thirdparty->email : '');
|
||||||
$substitutionarray['__THIRDPARTY_PHONE__'] = (is_object($object->thirdparty) ? $object->thirdparty->phone : '');
|
$substitutionarray['__THIRDPARTY_PHONE__'] = (is_object($object->thirdparty) ? dol_print_phone($object->thirdparty->phone) : '');
|
||||||
$substitutionarray['__THIRDPARTY_FAX__'] = (is_object($object->thirdparty) ? $object->thirdparty->fax : '');
|
$substitutionarray['__THIRDPARTY_FAX__'] = (is_object($object->thirdparty) ? dol_print_phone($object->thirdparty->fax) : '');
|
||||||
$substitutionarray['__THIRDPARTY_ADDRESS__'] = (is_object($object->thirdparty) ? $object->thirdparty->address : '');
|
$substitutionarray['__THIRDPARTY_ADDRESS__'] = (is_object($object->thirdparty) ? $object->thirdparty->address : '');
|
||||||
$substitutionarray['__THIRDPARTY_ZIP__'] = (is_object($object->thirdparty) ? $object->thirdparty->zip : '');
|
$substitutionarray['__THIRDPARTY_ZIP__'] = (is_object($object->thirdparty) ? $object->thirdparty->zip : '');
|
||||||
$substitutionarray['__THIRDPARTY_TOWN__'] = (is_object($object->thirdparty) ? $object->thirdparty->town : '');
|
$substitutionarray['__THIRDPARTY_TOWN__'] = (is_object($object->thirdparty) ? $object->thirdparty->town : '');
|
||||||
@ -7214,6 +7309,28 @@ function getCommonSubstitutionArray($outputlangs, $onlykey = 0, $exclude = null,
|
|||||||
$substitutionarray['__CONTRACT_LOWEST_EXPIRATION_DATE__'] = dol_print_date($datenextexpiration, 'dayrfc');
|
$substitutionarray['__CONTRACT_LOWEST_EXPIRATION_DATE__'] = dol_print_date($datenextexpiration, 'dayrfc');
|
||||||
$substitutionarray['__CONTRACT_LOWEST_EXPIRATION_DATETIME__'] = dol_print_date($datenextexpiration, 'standard');
|
$substitutionarray['__CONTRACT_LOWEST_EXPIRATION_DATETIME__'] = dol_print_date($datenextexpiration, 'standard');
|
||||||
}
|
}
|
||||||
|
// add substition variable for ticket
|
||||||
|
if (is_object($object) && $object->element == 'ticket') {
|
||||||
|
$substitutionarray['__TICKET_TRACKID__'] = $object->track_id;
|
||||||
|
$substitutionarray['__REF__'] = $object->ref;
|
||||||
|
$substitutionarray['__TICKET_SUBJECT__'] = $object->subject;
|
||||||
|
$substitutionarray['__TICKET_TYPE__'] = $object->type_code;
|
||||||
|
$substitutionarray['__TICKET_SEVERITY__'] = $object->severity_code;
|
||||||
|
$substitutionarray['__TICKET_CATEGORY__'] = $object->category_code; // For backward compatibility
|
||||||
|
$substitutionarray['__TICKET_ANALYTIC_CODE__'] = $object->category_code;
|
||||||
|
$substitutionarray['__TICKET_MESSAGE__'] = $object->message;
|
||||||
|
$substitutionarray['__TICKET_PROGRESSION__'] = $object->progress;
|
||||||
|
$userstat = new User($db);
|
||||||
|
if ($object->fk_user_assign > 0) {
|
||||||
|
$userstat->fetch($object->fk_user_assign);
|
||||||
|
$substitutionarray['__TICKET_USER_ASSIGN__'] = dolGetFirstLastname($userstat->firstname, $userstat->lastname);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($object->fk_user_create > 0) {
|
||||||
|
$userstat->fetch($object->fk_user_create);
|
||||||
|
$substitutionarray['__USER_CREATE__'] = dolGetFirstLastname($userstat->firstname, $userstat->lastname);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Create dynamic tags for __EXTRAFIELD_FIELD__
|
// Create dynamic tags for __EXTRAFIELD_FIELD__
|
||||||
if ($object->table_element && $object->id > 0) {
|
if ($object->table_element && $object->id > 0) {
|
||||||
@ -7236,6 +7353,11 @@ function getCommonSubstitutionArray($outputlangs, $onlykey = 0, $exclude = null,
|
|||||||
$substitutionarray['__EXTRAFIELD_'.strtoupper($key).'_LOCALE__'] = ($datetime != "0000-00-00 00:00:00" ? dol_print_date($datetime, 'dayhour', 'tzserver', $outputlangs) : '');
|
$substitutionarray['__EXTRAFIELD_'.strtoupper($key).'_LOCALE__'] = ($datetime != "0000-00-00 00:00:00" ? dol_print_date($datetime, 'dayhour', 'tzserver', $outputlangs) : '');
|
||||||
$substitutionarray['__EXTRAFIELD_'.strtoupper($key).'_DAY_LOCALE__'] = ($datetime != "0000-00-00 00:00:00" ? dol_print_date($datetime, 'day', 'tzserver', $outputlangs) : '');
|
$substitutionarray['__EXTRAFIELD_'.strtoupper($key).'_DAY_LOCALE__'] = ($datetime != "0000-00-00 00:00:00" ? dol_print_date($datetime, 'day', 'tzserver', $outputlangs) : '');
|
||||||
$substitutionarray['__EXTRAFIELD_'.strtoupper($key).'_RFC__'] = ($datetime != "0000-00-00 00:00:00" ? dol_print_date($datetime, 'dayhourrfc') : '');
|
$substitutionarray['__EXTRAFIELD_'.strtoupper($key).'_RFC__'] = ($datetime != "0000-00-00 00:00:00" ? dol_print_date($datetime, 'dayhourrfc') : '');
|
||||||
|
} elseif ($extrafields->attributes[$object->table_element]['type'][$key] == 'phone') {
|
||||||
|
$substitutionarray['__EXTRAFIELD_'.strtoupper($key).'__'] = dol_print_phone($object->array_options['options_'.$key]);
|
||||||
|
} elseif ($extrafields->attributes[$object->table_element]['type'][$key] == 'price') {
|
||||||
|
$substitutionarray['__EXTRAFIELD_'.strtoupper($key).'__'] = $object->array_options['options_'.$key];
|
||||||
|
$substitutionarray['__EXTRAFIELD_'.strtoupper($key).'_FORMATED__'] = price($object->array_options['options_'.$key]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1368,6 +1368,7 @@ function get_next_value($db, $mask, $table, $field, $where = '', $objsoc = '', $
|
|||||||
$numFinal = $ref;
|
$numFinal = $ref;
|
||||||
} elseif ($mode == 'next') {
|
} elseif ($mode == 'next') {
|
||||||
$counter++;
|
$counter++;
|
||||||
|
$maskrefclient_counter = 0;
|
||||||
|
|
||||||
// If value for $counter has a length higher than $maskcounter chars
|
// If value for $counter has a length higher than $maskcounter chars
|
||||||
if ($counter >= pow(10, dol_strlen($maskcounter))) {
|
if ($counter >= pow(10, dol_strlen($maskcounter))) {
|
||||||
@ -1398,7 +1399,6 @@ function get_next_value($db, $mask, $table, $field, $where = '', $objsoc = '', $
|
|||||||
$maskrefclient_maskLike = str_replace(dol_string_nospecial('{'.$maskrefclient.'}'), $maskrefclient_clientcode.str_pad("", dol_strlen($maskrefclient_maskcounter), "_"), $maskrefclient_maskLike);
|
$maskrefclient_maskLike = str_replace(dol_string_nospecial('{'.$maskrefclient.'}'), $maskrefclient_clientcode.str_pad("", dol_strlen($maskrefclient_maskcounter), "_"), $maskrefclient_maskLike);
|
||||||
|
|
||||||
// Get counter in database
|
// Get counter in database
|
||||||
$maskrefclient_counter = 0;
|
|
||||||
$maskrefclient_sql = "SELECT MAX(".$maskrefclient_sqlstring.") as val";
|
$maskrefclient_sql = "SELECT MAX(".$maskrefclient_sqlstring.") as val";
|
||||||
$maskrefclient_sql .= " FROM ".MAIN_DB_PREFIX.$table;
|
$maskrefclient_sql .= " FROM ".MAIN_DB_PREFIX.$table;
|
||||||
//$sql.= " WHERE ".$field." not like '(%'";
|
//$sql.= " WHERE ".$field." not like '(%'";
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user