Merge branch 'develop' of https://github.com/Dolibarr/dolibarr into pr/bb2a/21596
This commit is contained in:
commit
7d911aad20
4
.github/workflows/stale-issues-safe.yml
vendored
4
.github/workflows/stale-issues-safe.yml
vendored
@ -7,8 +7,12 @@ on:
|
|||||||
issue_comment:
|
issue_comment:
|
||||||
types: [created]
|
types: [created]
|
||||||
|
|
||||||
|
permissions: {} # none
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
stale:
|
stale:
|
||||||
|
permissions:
|
||||||
|
issues: write
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: Dolibarr/stale@staleunstale
|
- uses: Dolibarr/stale@staleunstale
|
||||||
|
|||||||
@ -6,7 +6,8 @@ build:
|
|||||||
analysis:
|
analysis:
|
||||||
tests:
|
tests:
|
||||||
override:
|
override:
|
||||||
- php-scrutinizer-run
|
- command: php-scrutinizer-run
|
||||||
|
idle_timeout: 8000
|
||||||
|
|
||||||
imports:
|
imports:
|
||||||
- javascript
|
- javascript
|
||||||
@ -39,9 +40,11 @@ tools:
|
|||||||
- build/*
|
- build/*
|
||||||
- dev/*
|
- dev/*
|
||||||
- doc/*
|
- doc/*
|
||||||
- test/*
|
- documents/*
|
||||||
- htdocs/includes/*
|
- htdocs/includes/*
|
||||||
- htdocs/core/class/lessc.class.php
|
- htdocs/core/class/lessc.class.php
|
||||||
|
- node_modules/*
|
||||||
|
- test/*
|
||||||
paths:
|
paths:
|
||||||
- htdocs/
|
- htdocs/
|
||||||
- scripts/
|
- scripts/
|
||||||
@ -181,8 +184,10 @@ tools:
|
|||||||
- 'build/*'
|
- 'build/*'
|
||||||
- 'dev/*'
|
- 'dev/*'
|
||||||
- 'doc/*'
|
- 'doc/*'
|
||||||
- 'test/*'
|
- 'documents/*'
|
||||||
- 'htdocs/includes/*'
|
- 'htdocs/includes/*'
|
||||||
|
- 'node_modules/*'
|
||||||
|
- 'test/*'
|
||||||
paths: { }
|
paths: { }
|
||||||
|
|
||||||
# Similar code detection
|
# Similar code detection
|
||||||
@ -194,8 +199,10 @@ tools:
|
|||||||
- 'build/*'
|
- 'build/*'
|
||||||
- 'dev/*'
|
- 'dev/*'
|
||||||
- 'doc/*'
|
- 'doc/*'
|
||||||
- 'test/*'
|
- 'documents/*'
|
||||||
- 'htdocs/includes/*'
|
- 'htdocs/includes/*'
|
||||||
|
- 'node_modules/*'
|
||||||
|
- 'test/*'
|
||||||
paths: { }
|
paths: { }
|
||||||
|
|
||||||
# Coding-Style / Bug Detection
|
# Coding-Style / Bug Detection
|
||||||
@ -209,8 +216,10 @@ tools:
|
|||||||
- 'build/*'
|
- 'build/*'
|
||||||
- 'dev/*'
|
- 'dev/*'
|
||||||
- 'doc/*'
|
- 'doc/*'
|
||||||
- 'test/*'
|
- 'documents/*'
|
||||||
- 'htdocs/includes/*'
|
- 'htdocs/includes/*'
|
||||||
|
- 'node_modules/*'
|
||||||
|
- 'test/*'
|
||||||
paths: { }
|
paths: { }
|
||||||
config: { }
|
config: { }
|
||||||
path_configs: { }
|
path_configs: { }
|
||||||
|
|||||||
98
.travis.yml
98
.travis.yml
@ -2,10 +2,9 @@
|
|||||||
# from Dolibarr GitHub repository.
|
# from Dolibarr GitHub repository.
|
||||||
# For syntax, see https://docs.travis-ci.com/user/languages/php/
|
# For syntax, see https://docs.travis-ci.com/user/languages/php/
|
||||||
|
|
||||||
# We use dist: xenial to have php 5.6+ available
|
# We use dist: bionic = 18.04
|
||||||
os: linux
|
os: linux
|
||||||
dist: xenial
|
dist: bionic
|
||||||
#dist: bionic
|
|
||||||
|
|
||||||
language: php
|
language: php
|
||||||
|
|
||||||
@ -18,21 +17,42 @@ services:
|
|||||||
- mysql
|
- mysql
|
||||||
- postgresql
|
- postgresql
|
||||||
|
|
||||||
|
|
||||||
|
before_install:
|
||||||
|
- |
|
||||||
|
echo "Add ondrej PPA"
|
||||||
|
sudo add-apt-repository -y ppa:ondrej/php
|
||||||
|
sudo apt-get update
|
||||||
|
echo "Disabling Xdebug for composer"
|
||||||
|
export PHP_VERSION_NAME=$(phpenv version-name)
|
||||||
|
echo $PHP_VERSION_NAME
|
||||||
|
ls ~/.phpenv/versions/$PHP_VERSION_NAME/etc/conf.d/
|
||||||
|
cp ~/.phpenv/versions/$PHP_VERSION_NAME/etc/conf.d/xdebug.ini /tmp/xdebug.ini
|
||||||
|
phpenv config-rm xdebug.ini
|
||||||
|
phpenv rehash
|
||||||
|
echo
|
||||||
|
|
||||||
addons:
|
addons:
|
||||||
# Force postgresql to 9.4 (the oldest availablable on xenial)
|
# Force postgresql version
|
||||||
postgresql: '9.4'
|
postgresql: '10'
|
||||||
apt:
|
apt:
|
||||||
sources:
|
sources:
|
||||||
# To use the last version of pgloader, we add repo of postgresql with a name available in http://apt.postgresql.org/pub/repos/apt/
|
- sourceline: 'ppa:ondrej/php'
|
||||||
- pgdg-xenial
|
|
||||||
packages:
|
packages:
|
||||||
# We need a webserver to test the webservices
|
# We need a webserver to test the webservices
|
||||||
# Let's install Apache with.
|
# Let's install Apache with.
|
||||||
- apache2
|
- apache2
|
||||||
# mod_php is not supported by Travis. Add fcgi. We install FPM later on.
|
|
||||||
- libapache2-mod-fastcgi
|
|
||||||
# We need pgloader for import mysql database into pgsql
|
# We need pgloader for import mysql database into pgsql
|
||||||
- pgloader
|
- pgloader
|
||||||
|
- php
|
||||||
|
- php7.1-pgsql
|
||||||
|
- php7.1-mysqli
|
||||||
|
- php7.1-xml
|
||||||
|
- php7.1-intl
|
||||||
|
- php8.1-pgsql
|
||||||
|
- php8.1-mysqli
|
||||||
|
- php8.1-xml
|
||||||
|
- php8.1-intl
|
||||||
|
|
||||||
env:
|
env:
|
||||||
global:
|
global:
|
||||||
@ -44,20 +64,20 @@ jobs:
|
|||||||
#allow_failures:
|
#allow_failures:
|
||||||
#- php: nightly
|
#- php: nightly
|
||||||
include:
|
include:
|
||||||
- stage: PHP 5.6-7.4
|
- stage: PHP 7.0-8.1
|
||||||
if: type = push
|
if: type = push
|
||||||
php: '5.6'
|
php: '7.1'
|
||||||
env: DB=postgresql
|
env: DB=postgresql
|
||||||
- stage: PHP 5.6-7.4
|
- stage: PHP 7.0-8.1
|
||||||
if: type = pull_request OR type = push
|
if: type = pull_request OR type = push
|
||||||
php: '7.4.22'
|
php: '8.1'
|
||||||
env: DB=mysql
|
env: DB=mysql
|
||||||
- stage: PHP Dev
|
- stage: PHP Dev
|
||||||
if: type = push AND branch = develop
|
if: type = push AND branch = develop
|
||||||
php: nightly
|
php: nightly
|
||||||
env: DB=mysql
|
env: DB=mysql
|
||||||
- stage: PHP Dev
|
- stage: PHP Dev
|
||||||
if: type = push AND branch = 15.0
|
if: type = push AND branch = 17.0
|
||||||
php: nightly
|
php: nightly
|
||||||
env: DB=mysql
|
env: DB=mysql
|
||||||
|
|
||||||
@ -72,13 +92,6 @@ notifications:
|
|||||||
on_failure: always
|
on_failure: always
|
||||||
use_notice: true
|
use_notice: true
|
||||||
|
|
||||||
before_install:
|
|
||||||
- |
|
|
||||||
echo "Disabling Xdebug for composer"
|
|
||||||
export PHP_VERSION_NAME=$(phpenv version-name)
|
|
||||||
cp ~/.phpenv/versions/$PHP_VERSION_NAME/etc/conf.d/xdebug.ini /tmp/xdebug.ini
|
|
||||||
phpenv config-rm xdebug.ini
|
|
||||||
echo
|
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- |
|
- |
|
||||||
@ -94,13 +107,6 @@ install:
|
|||||||
|
|
||||||
- |
|
- |
|
||||||
echo "Installing Composer dependencies - PHP Unit, Parallel Lint, PHP CodeSniffer, PHP Vardump check - for $TRAVIS_PHP_VERSION"
|
echo "Installing Composer dependencies - PHP Unit, Parallel Lint, PHP CodeSniffer, PHP Vardump check - for $TRAVIS_PHP_VERSION"
|
||||||
if [ "$TRAVIS_PHP_VERSION" = '5.6' ]; then
|
|
||||||
composer -n require phpunit/phpunit ^5 \
|
|
||||||
php-parallel-lint/php-parallel-lint ^1 \
|
|
||||||
php-parallel-lint/php-console-highlighter ^0 \
|
|
||||||
php-parallel-lint/php-var-dump-check ~0.4 \
|
|
||||||
squizlabs/php_codesniffer ^3
|
|
||||||
fi
|
|
||||||
if [ "$TRAVIS_PHP_VERSION" = '7.0' ] || [ "$TRAVIS_PHP_VERSION" = '7.1' ] || [ "$TRAVIS_PHP_VERSION" = '7.2' ]; then
|
if [ "$TRAVIS_PHP_VERSION" = '7.0' ] || [ "$TRAVIS_PHP_VERSION" = '7.1' ] || [ "$TRAVIS_PHP_VERSION" = '7.2' ]; then
|
||||||
composer -n require phpunit/phpunit ^6 \
|
composer -n require phpunit/phpunit ^6 \
|
||||||
php-parallel-lint/php-parallel-lint ^1 \
|
php-parallel-lint/php-parallel-lint ^1 \
|
||||||
@ -108,7 +114,7 @@ install:
|
|||||||
php-parallel-lint/php-var-dump-check ~0.4 \
|
php-parallel-lint/php-var-dump-check ~0.4 \
|
||||||
squizlabs/php_codesniffer ^3
|
squizlabs/php_codesniffer ^3
|
||||||
fi
|
fi
|
||||||
if [ "$TRAVIS_PHP_VERSION" = '7.3' ] || [ "$TRAVIS_PHP_VERSION" = '7.4' ] || [ "$TRAVIS_PHP_VERSION" = '7.4.22' ]; then
|
if [ "$TRAVIS_PHP_VERSION" = '7.3' ] || [ "$TRAVIS_PHP_VERSION" = '7.4' ]; then
|
||||||
composer -n require phpunit/phpunit ^7 \
|
composer -n require phpunit/phpunit ^7 \
|
||||||
php-parallel-lint/php-parallel-lint ^1.2 \
|
php-parallel-lint/php-parallel-lint ^1.2 \
|
||||||
php-parallel-lint/php-console-highlighter ^0 \
|
php-parallel-lint/php-console-highlighter ^0 \
|
||||||
@ -116,8 +122,8 @@ install:
|
|||||||
squizlabs/php_codesniffer ^3
|
squizlabs/php_codesniffer ^3
|
||||||
fi
|
fi
|
||||||
# phpunit 9 is required for php 8
|
# phpunit 9 is required for php 8
|
||||||
if [ "$TRAVIS_PHP_VERSION" = 'nightly' ]; then
|
if [ "$TRAVIS_PHP_VERSION" = '8.0' ] || [ "$TRAVIS_PHP_VERSION" = '8.1' ] || [ "$TRAVIS_PHP_VERSION" = 'nightly' ]; then
|
||||||
composer -n require --ignore-platform-reqs phpunit/phpunit ^7 \
|
composer -n require --ignore-platform-reqs phpunit/phpunit ^8 \
|
||||||
php-parallel-lint/php-parallel-lint ^1.2 \
|
php-parallel-lint/php-parallel-lint ^1.2 \
|
||||||
php-parallel-lint/php-console-highlighter ^0 \
|
php-parallel-lint/php-console-highlighter ^0 \
|
||||||
php-parallel-lint/php-var-dump-check ~0.4 \
|
php-parallel-lint/php-var-dump-check ~0.4 \
|
||||||
@ -246,17 +252,22 @@ before_script:
|
|||||||
|
|
||||||
|
|
||||||
- echo "Setting up Apache + FPM"
|
- echo "Setting up Apache + FPM"
|
||||||
|
# setup link for php legacy
|
||||||
|
- sudo ln -s ~/.phpenv/versions/$(phpenv version-name)/bin/php /bin/php
|
||||||
|
# install apache web server
|
||||||
|
- sudo apt-get install apache2 php-fpm php-mysql php-pgsql php-gd php-ldap php-xml php-mbstring libapache2-mod-php
|
||||||
# enable php-fpm
|
# enable php-fpm
|
||||||
- sudo cp ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.conf.default ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.conf
|
- sudo cp ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.conf.default ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.conf
|
||||||
- |
|
- |
|
||||||
if [ "$TRAVIS_PHP_VERSION" = '7.0' ] || [ "$TRAVIS_PHP_VERSION" = '7.1' ] || [ "$TRAVIS_PHP_VERSION" = '7.2' ] || [ "$TRAVIS_PHP_VERSION" = '7.3' ] || [ "$TRAVIS_PHP_VERSION" = '7.4' ] || [ "$TRAVIS_PHP_VERSION" = '7.4.22' ] || [ "$TRAVIS_PHP_VERSION" = 'nightly' ]; then
|
if [ "$TRAVIS_PHP_VERSION" = '7.0' ] || [ "$TRAVIS_PHP_VERSION" = '7.1' ] || [ "$TRAVIS_PHP_VERSION" = '7.2' ] || [ "$TRAVIS_PHP_VERSION" = '7.3' ] || [ "$TRAVIS_PHP_VERSION" = '7.4' ] || [ "$TRAVIS_PHP_VERSION" = '8.0' ] || [ "$TRAVIS_PHP_VERSION" = '8.1' ] || [ "$TRAVIS_PHP_VERSION" = 'nightly' ]; then
|
||||||
# Copy the included pool
|
# Copy the included pool
|
||||||
sudo cp ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.d/www.conf.default ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.d/www.conf
|
sudo cp ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.d/www.conf.default ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.d/www.conf
|
||||||
fi
|
fi
|
||||||
- sudo a2enmod rewrite actions fastcgi alias
|
- sudo a2enmod proxy_fcgi rewrite setenvif cgi alias
|
||||||
- echo "cgi.fix_pathinfo = 1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini
|
- echo "cgi.fix_pathinfo = 1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini
|
||||||
- sudo sed -i -e "s,www-data,travis,g" /etc/apache2/envvars
|
- sudo sed -i -e "s,www-data,travis,g" /etc/apache2/envvars
|
||||||
- sudo chown -R travis:travis /var/lib/apache2/fastcgi
|
#- sudo chown -R travis:travis /var/lib/apache2/fastcgi
|
||||||
|
# start php-fpm
|
||||||
- ~/.phpenv/versions/$(phpenv version-name)/sbin/php-fpm
|
- ~/.phpenv/versions/$(phpenv version-name)/sbin/php-fpm
|
||||||
# configure apache virtual hosts
|
# configure apache virtual hosts
|
||||||
- sudo cp -f build/travis-ci/apache.conf /etc/apache2/sites-available/000-default.conf
|
- sudo cp -f build/travis-ci/apache.conf /etc/apache2/sites-available/000-default.conf
|
||||||
@ -284,12 +295,12 @@ script:
|
|||||||
set -e
|
set -e
|
||||||
#parallel-lint --exclude htdocs/includes --blame .
|
#parallel-lint --exclude htdocs/includes --blame .
|
||||||
# Exclusions are defined in the ruleset.xml file
|
# Exclusions are defined in the ruleset.xml file
|
||||||
if [ "$TRAVIS_PHP_VERSION" = "7.4.22" ]; then
|
if [ "$TRAVIS_PHP_VERSION" = "8.1" ]; then
|
||||||
parallel-lint -e php --exclude dev/tools/test/namespacemig --exclude htdocs/includes/composer --exclude htdocs/includes/myclabs --exclude htdocs/includes/phpspec --exclude dev/initdata/dbf/includes \
|
parallel-lint -e php --exclude dev/tools/test/namespacemig --exclude htdocs/includes/composer --exclude htdocs/includes/myclabs --exclude htdocs/includes/phpspec --exclude dev/initdata/dbf/includes \
|
||||||
--exclude htdocs/includes/sabre --exclude htdocs/includes/phpoffice/PhpSpreadsheet --exclude htdocs/includes/sebastian \
|
--exclude htdocs/includes/sabre --exclude htdocs/includes/phpoffice/PhpSpreadsheet --exclude htdocs/includes/sebastian \
|
||||||
--exclude htdocs/includes/squizlabs/php_codesniffer --exclude htdocs/includes/jakub-onderka --exclude htdocs/includes/php-parallel-lint --exclude htdocs/includes/symfony \
|
--exclude htdocs/includes/squizlabs/php_codesniffer --exclude htdocs/includes/jakub-onderka --exclude htdocs/includes/php-parallel-lint --exclude htdocs/includes/symfony \
|
||||||
--exclude htdocs/includes/mike42/escpos-php/example --exclude htdocs/includes/maximebf \
|
--exclude htdocs/includes/mike42/escpos-php/example --exclude htdocs/includes/maximebf \
|
||||||
--exclude htdocs/includes/phpunit/ --exclude htdocs/includes/tecnickcom/tcpdf/include/barcodes --exclude htdocs/includes/webmozart --blame .
|
--exclude htdocs/includes/phpunit/ --exclude htdocs/includes/tecnickcom/tcpdf/include/barcodes --exclude htdocs/includes/webmozart --exclude htdocs/includes/webklex --blame .
|
||||||
fi
|
fi
|
||||||
set +e
|
set +e
|
||||||
echo
|
echo
|
||||||
@ -299,7 +310,7 @@ script:
|
|||||||
# Ensure we catch errors
|
# Ensure we catch errors
|
||||||
set -e
|
set -e
|
||||||
# Exclusions are defined in the ruleset.xml file
|
# Exclusions are defined in the ruleset.xml file
|
||||||
if [ "$TRAVIS_PULL_REQUEST" = "false" ] && [ "$TRAVIS_PHP_VERSION" = "7.4.22" ]; then
|
if [ "$TRAVIS_PULL_REQUEST" = "false" ] && [ "$TRAVIS_PHP_VERSION" = "8.1" ]; then
|
||||||
phpcs -s -p -d memory_limit=-1 --extensions=php --colors --tab-width=4 --standard=dev/setup/codesniffer/ruleset.xml --encoding=utf-8 --runtime-set ignore_warnings_on_exit true .;
|
phpcs -s -p -d memory_limit=-1 --extensions=php --colors --tab-width=4 --standard=dev/setup/codesniffer/ruleset.xml --encoding=utf-8 --runtime-set ignore_warnings_on_exit true .;
|
||||||
fi
|
fi
|
||||||
set +e
|
set +e
|
||||||
@ -310,7 +321,7 @@ script:
|
|||||||
# Ensure we catch errors
|
# Ensure we catch errors
|
||||||
set -e
|
set -e
|
||||||
# Exclusions are defined in the ruleset.xml file
|
# Exclusions are defined in the ruleset.xml file
|
||||||
if [ "$TRAVIS_PULL_REQUEST" = "false" ] && [ "$TRAVIS_PHP_VERSION" = "7.4.22" ]; then
|
if [ "$TRAVIS_PULL_REQUEST" = "false" ] && [ "$TRAVIS_PHP_VERSION" = "8.1" ]; then
|
||||||
var-dump-check --extensions php --tracy --exclude htdocs/includes --exclude test/ --exclude htdocs/public/test/ --exclude htdocs/core/lib/functions.lib.php .
|
var-dump-check --extensions php --tracy --exclude htdocs/includes --exclude test/ --exclude htdocs/public/test/ --exclude htdocs/core/lib/functions.lib.php .
|
||||||
fi
|
fi
|
||||||
set +e
|
set +e
|
||||||
@ -471,6 +482,9 @@ after_script:
|
|||||||
ls $TRAVIS_BUILD_DIR/documents
|
ls $TRAVIS_BUILD_DIR/documents
|
||||||
#cat $TRAVIS_BUILD_DIR/documents/dolibarr.log
|
#cat $TRAVIS_BUILD_DIR/documents/dolibarr.log
|
||||||
sudo tail -n 50 $TRAVIS_BUILD_DIR/documents/dolibarr.log
|
sudo tail -n 50 $TRAVIS_BUILD_DIR/documents/dolibarr.log
|
||||||
|
echo "After script - Output last lines of apache error.log"
|
||||||
|
sudo ls /var/log/apache2
|
||||||
|
sudo tail -n 50 /var/log/apache2/travis_error_log
|
||||||
|
|
||||||
after_success:
|
after_success:
|
||||||
- |
|
- |
|
||||||
@ -479,16 +493,16 @@ after_success:
|
|||||||
after_failure:
|
after_failure:
|
||||||
- |
|
- |
|
||||||
echo Failure detected, so we show samples of log to help diagnose
|
echo Failure detected, so we show samples of log to help diagnose
|
||||||
# This part of code is executed only if previous command that fails are enclosed with set +e
|
# This part of code is executed only if the command that fails are enclosed with set +e
|
||||||
# Upgrade log files
|
# Show upgrade log files
|
||||||
for ficlog in `ls $TRAVIS_BUILD_DIR/*.log`
|
for ficlog in `ls $TRAVIS_BUILD_DIR/*.log`
|
||||||
do
|
do
|
||||||
echo "Debugging informations for file $ficlog"
|
echo "Debugging informations for file $ficlog"
|
||||||
#cat $ficlog
|
#cat $ficlog
|
||||||
done
|
done
|
||||||
# Apache log file
|
# Show Apache log file
|
||||||
echo "Debugging informations for file apache error.log"
|
echo "Debugging informations for file apache error.log"
|
||||||
sudo cat /var/log/apache2/travis_error_log
|
sudo tail -n 50 /var/log/apache2/travis_error_log
|
||||||
if [ "$DEBUG" = true ]; then
|
if [ "$DEBUG" = true ]; then
|
||||||
# Dolibarr log file
|
# Dolibarr log file
|
||||||
echo "Debugging informations for file dolibarr.log (latest 50 lines)"
|
echo "Debugging informations for file dolibarr.log (latest 50 lines)"
|
||||||
|
|||||||
@ -98,6 +98,12 @@ source_file = htdocs/langs/en_US/cron.lang
|
|||||||
source_lang = en_US
|
source_lang = en_US
|
||||||
type = MOZILLAPROPERTIES
|
type = MOZILLAPROPERTIES
|
||||||
|
|
||||||
|
[dolibarr.datapolicy]
|
||||||
|
file_filter = htdocs/langs/<lang>/datapolicy.lang
|
||||||
|
source_file = htdocs/langs/en_US/datapolicy.lang
|
||||||
|
source_lang = en_US
|
||||||
|
type = MOZILLAPROPERTIES
|
||||||
|
|
||||||
[dolibarr.deliveries]
|
[dolibarr.deliveries]
|
||||||
file_filter = htdocs/langs/<lang>/deliveries.lang
|
file_filter = htdocs/langs/<lang>/deliveries.lang
|
||||||
source_file = htdocs/langs/en_US/deliveries.lang
|
source_file = htdocs/langs/en_US/deliveries.lang
|
||||||
|
|||||||
@ -23,7 +23,6 @@ Licence of dependencies of third-party components used by Dolibarr (all compatib
|
|||||||
Component Version License GPL Compatible Usage
|
Component Version License GPL Compatible Usage
|
||||||
-------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------
|
||||||
PHP libraries:
|
PHP libraries:
|
||||||
ADOdb-Date 0.36 Modified BSD License Yes Date convertion (not into rpm package)
|
|
||||||
EvalMath 1.0 BSD Yes Safe math expressions evaluation
|
EvalMath 1.0 BSD Yes Safe math expressions evaluation
|
||||||
Escpos-php 2.2 MIT License Yes Thermal receipt printer library, for use with ESC/POS compatible printers
|
Escpos-php 2.2 MIT License Yes Thermal receipt printer library, for use with ESC/POS compatible printers
|
||||||
GeoIP2 0.2.0 Apache License 2.0 Yes Lib to make geoip convert
|
GeoIP2 0.2.0 Apache License 2.0 Yes Lib to make geoip convert
|
||||||
@ -33,8 +32,9 @@ PEAR Mail_MIME 1.8.9 BSD Yes
|
|||||||
ParseDown 1.6 MIT License Yes Markdown parser
|
ParseDown 1.6 MIT License Yes Markdown parser
|
||||||
PCLZip 2.8.4 LGPL-3+ Yes Library to zip/unzip files
|
PCLZip 2.8.4 LGPL-3+ Yes Library to zip/unzip files
|
||||||
PHPDebugBar 1.15.1 MIT License Yes Used only by the module "debugbar" for developers
|
PHPDebugBar 1.15.1 MIT License Yes Used only by the module "debugbar" for developers
|
||||||
|
PHP-Imap 2.7.2 MIT License Yes Library to use IMAP with OAuth
|
||||||
PHPSpreadSheet 1.8.2 LGPL-2.1+ Yes Read/Write XLS files, read ODS files
|
PHPSpreadSheet 1.8.2 LGPL-2.1+ Yes Read/Write XLS files, read ODS files
|
||||||
php-iban 4.1 LGPL-3+ Yes Parse and validate IBAN (and IIBAN) bank account information in PHP
|
php-iban 4.1.1 LGPL-3+ Yes Parse and validate IBAN (and IIBAN) bank account information in PHP
|
||||||
PHPoAuthLib 0.8.2 MIT License Yes Library to provide oauth1 and oauth2 to different service
|
PHPoAuthLib 0.8.2 MIT License Yes Library to provide oauth1 and oauth2 to different service
|
||||||
PHPPrintIPP 1.3 GPL-2+ Yes Library to send print IPP requests
|
PHPPrintIPP 1.3 GPL-2+ Yes Library to send print IPP requests
|
||||||
PSR/Logs 1.0 MIT License Yes Library for logs (used by DebugBar)
|
PSR/Logs 1.0 MIT License Yes Library for logs (used by DebugBar)
|
||||||
|
|||||||
229
ChangeLog
229
ChangeLog
@ -7,12 +7,16 @@ English Dolibarr ChangeLog
|
|||||||
For users:
|
For users:
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
|
NEW Minimal PHP version is now PHP 7.0 instead of PHP 5.6
|
||||||
|
|
||||||
...
|
...
|
||||||
|
|
||||||
|
|
||||||
For developers or integrators:
|
For developers or integrators:
|
||||||
------------------------------
|
------------------------------
|
||||||
|
|
||||||
|
NEW Minimal PHP version is now PHP 7.0 instead of PHP 5.6
|
||||||
|
|
||||||
...
|
...
|
||||||
|
|
||||||
|
|
||||||
@ -20,6 +24,88 @@ WARNING:
|
|||||||
|
|
||||||
Following changes may create regressions for some external modules, but were necessary to make Dolibarr better:
|
Following changes may create regressions for some external modules, but were necessary to make Dolibarr better:
|
||||||
* The signature of method getNomUrl() of class ProductFournisseur has been modified to match the signature of method Product
|
* The signature of method getNomUrl() of class ProductFournisseur has been modified to match the signature of method Product
|
||||||
|
* Trigger ORDER_SUPPLIER_DISPATCH is removed, use ORDER_SUPPLIER_RECEIVE and/or LINEORDER_SUPPLIER_DISPATCH instead.
|
||||||
|
* All functions fetch_all() are deprecated for naming consitency, use fetchAll() instead
|
||||||
|
* Code standardization: $user->rights->propale is now $user->rights->propal everywhere.
|
||||||
|
|
||||||
|
|
||||||
|
***** ChangeLog for 16.0.1 compared to 16.0.0 *****
|
||||||
|
|
||||||
|
FIX: #16476 on massaction the pdf generation is not using the t…
|
||||||
|
FIX: #21416 Filter tag no-categorie in members
|
||||||
|
FIX: #21543
|
||||||
|
FIX: #21799 inactive companies shall not be selectable for new proposals, orders and invoices
|
||||||
|
FIX: #21859 Don't show html balise on list for private/public note
|
||||||
|
FIX: #22164
|
||||||
|
FIX: #22241
|
||||||
|
FIX: #22263 Accountancy - Account number expected in place of a rowid on parent account on export
|
||||||
|
FIX: #22264 Accountancy - Translation on chart of accounts export
|
||||||
|
FIX: #22265 Accountancy - Account number expected in place of a rowid on export
|
||||||
|
FIX: #22334
|
||||||
|
FIX: #22360
|
||||||
|
FIX: #22379 creating events on supplier order
|
||||||
|
FIX: #22382 Error on length of supplier reference
|
||||||
|
FIX: #22386 IBAN not mandatory for International Export Countries
|
||||||
|
FIX: #22440 Lang Key "UserAccountNotDefined" is missing
|
||||||
|
FIX: #22482
|
||||||
|
FIX: #22507
|
||||||
|
FIX: Accountancy - Some manuals operations are displayed in subledger
|
||||||
|
FIX: API reception return error 500
|
||||||
|
FIX: avoid override initial message ($this instead $object)
|
||||||
|
FIX: avoid some warnings (php8+)
|
||||||
|
FIX: Bad backtopage and CSRF on link for ticket message
|
||||||
|
FIX: bad closing select
|
||||||
|
FIX: broken feature, wrong fk_parent_line after cloning object
|
||||||
|
FIX: Column label
|
||||||
|
FIX: compatibility if javascript not actived
|
||||||
|
FIX: compatibility with Mysql <= 5.7
|
||||||
|
FIX: contact deletion: execute trigger before really deleting
|
||||||
|
FIX: CronJob sendBackup
|
||||||
|
FIX: CSRF + lost value of constant after use save button
|
||||||
|
FIX: CSS
|
||||||
|
FIX: data integrity for llx_delivery table
|
||||||
|
FIX: default value for partnership status
|
||||||
|
FIX: deletion of the MO_CHILD link
|
||||||
|
FIX: Dictionary - Display error on cache_vatrates
|
||||||
|
FIX: Dolibarr#16476 version 2a
|
||||||
|
FIX: Duplicate creation of invoice when closing shipment linked to order
|
||||||
|
FIX: Duplicate in list when filtering on categories
|
||||||
|
FIX: extrafields with value '0' was ''
|
||||||
|
FIX: filters lost when sorting on productMargin and customerMargins
|
||||||
|
FIX: fk_expedition in $line can be usefull for triggers
|
||||||
|
FIX: Import in upgrade when using a socialnetwork field.
|
||||||
|
FIX: input hidden with fk_product of line on mo production can be usefull
|
||||||
|
FIX: inventory code must be different at each transation
|
||||||
|
FIX: inventory total columns
|
||||||
|
FIX: Issue #16476 on massaction the pdf generation is not using the thirdparty language settings
|
||||||
|
FIX: Linked object agenda card
|
||||||
|
FIX: missing check if category module is enabled
|
||||||
|
FIX: missing check if incoice as a payment (wrong status)
|
||||||
|
FIX: missing class "societe" when create another object with workflow
|
||||||
|
FIX: missing error message if image size too large
|
||||||
|
FIX: Missing reposition
|
||||||
|
FIX: missing the management of a constant in the Ticket config
|
||||||
|
FIX: Missing token in different URLs links
|
||||||
|
FIX: @ must be allowed into dol_eval to allow rules including external module string 'abc@def'
|
||||||
|
FIX: - php V8 get number doc saphir
|
||||||
|
FIX: - php V8 propal index last draft
|
||||||
|
FIX: Preview button position on documents list (case when the file is too long)
|
||||||
|
FIX: Project - on global view, missing display of ref customer
|
||||||
|
FIX: Protection against bad value into accurancy setup
|
||||||
|
FIX: reading of trackid in emailcollector (when on recipient suffix)
|
||||||
|
FIX: recruitment linked files
|
||||||
|
FIX: Remove use of code we should not have
|
||||||
|
FIX: Restore the option MAIN_OPTIMIZEFORTEXTBROWSER
|
||||||
|
FIX: Rich text is not diplayed
|
||||||
|
FIX: same thing in deleteline
|
||||||
|
FIX: Supplier Reference is lost when page breaks
|
||||||
|
FIX: support of array parameters in "add to bookmark" feature.
|
||||||
|
FIX: Test that web dir is correct in install
|
||||||
|
FIX: the shipment PDF was using the full size logo instead of small
|
||||||
|
FIX: Token Error : delete stock transfer
|
||||||
|
FIX: ToOfferALinkForOnlinePayment not translated
|
||||||
|
FIX: tooltip of technical tables added of a module
|
||||||
|
FIX: wrong result check when update expensereport line
|
||||||
|
|
||||||
|
|
||||||
***** ChangeLog for 16.0.0 compared to 15.0.0 *****
|
***** ChangeLog for 16.0.0 compared to 15.0.0 *****
|
||||||
@ -27,9 +113,9 @@ Following changes may create regressions for some external modules, but were nec
|
|||||||
For users:
|
For users:
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
NEW: PHP 8.1 compatibility.
|
NEW: PHP 8.0 and 8.1 compatibility:
|
||||||
Warning: Application works correctly with PHP8 and 8.1 but you may experience a lot of PHP warning into the PHP server log files (depending
|
Warning!! Application works correctly with PHP 8.0 and 8.1 but you will experience a lot of PHP warnings into the PHP server
|
||||||
on the PHP setup). Removal of all PHP warnings on server side is planned for v17.
|
log files (depending on your PHP setup). Removal of all PHP warnings on server side is planned for v17.
|
||||||
NEW: Support for recurring purchase invoices.
|
NEW: Support for recurring purchase invoices.
|
||||||
NEW: #20292 Include German public holidays
|
NEW: #20292 Include German public holidays
|
||||||
NEW: Can show ZATCA QR-Code on PDFs
|
NEW: Can show ZATCA QR-Code on PDFs
|
||||||
@ -41,107 +127,106 @@ NEW: Accept 'auto' for ref of object on import of purchase order/proposal
|
|||||||
NEW: Accountancy - Add more filters and info on page to bind accounting accounts
|
NEW: Accountancy - Add more filters and info on page to bind accounting accounts
|
||||||
NEW: Accountancy - Add subledger account when generate a transaction with a deposit invoice
|
NEW: Accountancy - Add subledger account when generate a transaction with a deposit invoice
|
||||||
NEW: Accountancy - Add a massaction to preselect an account (customer and supplier list)
|
NEW: Accountancy - Add a massaction to preselect an account (customer and supplier list)
|
||||||
|
NEW: Accountancy - Add hidden feature for accounting reconciliation
|
||||||
NEW: ACE Editor is restored at same cursor position after a save.
|
NEW: ACE Editor is restored at same cursor position after a save.
|
||||||
NEW: Add "addMoreActionsButtons" hook to subscription form
|
NEW: Add "addMoreActionsButtons" hook to subscription form
|
||||||
NEW: Add an option in GUI to show a Quick add button into top menu bar
|
NEW: Add an option in GUI to show a Quick add button into top menu bar
|
||||||
NEW: Add a workflow to auto link contract on a ticket
|
NEW: Add a workflow to auto link contract on a ticket
|
||||||
NEW: Add column date of Signature on proposal list
|
|
||||||
NEW: Add column template invoice in invoice list
|
NEW: Add column template invoice in invoice list
|
||||||
NEW: Add column "Total HT" to products array on document creation card
|
NEW: Add column "Total HT" to products array on document creation card
|
||||||
NEW: Add configuration for text color of button action
|
NEW: Add configuration for text color of button action
|
||||||
NEW: Add constant to hide categories in TakePos
|
|
||||||
NEW: Add constant to show category description in TakePos
|
|
||||||
NEW: Add constant to show only the products in stock in TakePos
|
|
||||||
NEW: Add entity filter in exports
|
|
||||||
NEW: Show the event block on recurring invoices #20870
|
NEW: Show the event block on recurring invoices #20870
|
||||||
NEW: Add filter "opportunity status" on statistics of projects.
|
|
||||||
NEW: Add firstname, lastname and max number of attendees for module "Event Organization"
|
NEW: Add firstname, lastname and max number of attendees for module "Event Organization"
|
||||||
NEW: Add margin info in proposal and order list
|
NEW: Add margin info in proposal and order list
|
||||||
NEW: Add massaction "Edit Extrafield" for Product
|
|
||||||
NEW: Add more fields to detect duplicate during import of thirdparties
|
NEW: Add more fields to detect duplicate during import of thirdparties
|
||||||
NEW: Add option to foce delivery on email for purchase order receipt to yes
|
NEW: Add option to foce delivery on email for purchase order receipt to yes
|
||||||
NEW: Add param boder table for md theme
|
|
||||||
NEW: Add param color button action
|
|
||||||
NEW: Add possibility to create contract from invoice
|
NEW: Add possibility to create contract from invoice
|
||||||
NEW: Add possibility with constant MAIN_LOGIN_BADCHARUNAUTHORIZED to define bad character unauthorized into login name
|
NEW: Add possibility with constant MAIN_LOGIN_BADCHARUNAUTHORIZED to define bad character unauthorized into login name
|
||||||
NEW: Add private and public notes on tax files.
|
NEW: Add private and public notes on tax files
|
||||||
NEW: Add status "Obsolete" to KM articles
|
|
||||||
NEW: Add substitutions "user numbers"
|
NEW: Add substitutions "user numbers"
|
||||||
NEW: allow a ticket to be automatically marked as read when created from backend.
|
|
||||||
NEW: allow cut&paste as real numeric value to excel
|
NEW: allow cut&paste as real numeric value to excel
|
||||||
NEW: A public form to send a message and create a lead is available
|
NEW: A public form to send a message and create a lead is available
|
||||||
NEW: automatically set totally received status in reception
|
NEW: automatically set totally received status in reception
|
||||||
NEW: Auto set invoice paid when adding credit not and remain to pay is 0
|
NEW: Auto set invoice paid when adding credit not and remain to pay is 0
|
||||||
NEW: Availibility dictionnary has a new column unit and number
|
NEW: Backup tool has an "lowmemory" option for mysqldump on large database
|
||||||
NEW: Can change value of AWP during the inventory
|
|
||||||
NEW: Can enter price with tax for predefined products on purchase objects
|
NEW: Can enter price with tax for predefined products on purchase objects
|
||||||
NEW: Can filter on a thirdparty on product statistics
|
|
||||||
NEW: Can removed doc templates from setup page of thirdparty
|
NEW: Can removed doc templates from setup page of thirdparty
|
||||||
NEW: Can set the parent company during the creation of thirdparty (action=add of societe/card.php)
|
|
||||||
NEW: Can use ! to make a search that exclude a string
|
NEW: Can use ! to make a search that exclude a string
|
||||||
NEW: Change in theme colors does not need to use the refresh button
|
|
||||||
NEW: clean values and amount in FEC import
|
NEW: clean values and amount in FEC import
|
||||||
NEW: const MAIL_MASS_ACTION_ADD_LAST_IF_MAIN_DOC_NOT_FOUND for mailing mass action
|
NEW: const MAIL_MASS_ACTION_ADD_LAST_IF_MAIN_DOC_NOT_FOUND for mailing mass action
|
||||||
NEW: Contact filter project list
|
NEW: Contact filter project list
|
||||||
NEW: Create contract from invoice
|
NEW: Create contract from invoice
|
||||||
NEW: create third-party with contact if not found on public ticket
|
NEW: Database: Can store the session into database (instead of beeing managed by PHP)
|
||||||
|
NEW: Database: Some core tables are created only at module activation
|
||||||
NEW: Default value for MAIN_SECURITY_CSRF_WITH_TOKEN is now 2 (GET are also protected agains CSRF attacks)
|
NEW: Default value for MAIN_SECURITY_CSRF_WITH_TOKEN is now 2 (GET are also protected agains CSRF attacks)
|
||||||
NEW: deposit payment terms: add field into dictionary admin page to define default percentage of deposit.
|
NEW: deposit payment terms: add field into dictionary admin page to define default percentage of deposit.
|
||||||
NEW: Dictionaries - add possibility to manage countries in EEC
|
NEW: Dictionaries - add possibility to manage countries in EEC
|
||||||
|
NEW: Dictionaries - Availibility dictionnary has a new column unit and number
|
||||||
NEW: Display errors in a message box after generating documents
|
NEW: Display errors in a message box after generating documents
|
||||||
NEW: Display physical and virtual stock of the products when creating OF from a BOM
|
|
||||||
NEW: Display product ref in "Object link" product tab for BOM
|
|
||||||
NEW: Enhance the import. Can use 'auto' for the ref (import of orders)
|
NEW: Enhance the import. Can use 'auto' for the ref (import of orders)
|
||||||
NEW: Events on Proposal to Return to Draft
|
NEW: Events on Proposal to Return to Draft
|
||||||
|
NEW: Exports - add entity filter in exports
|
||||||
NEW: Page to list expense report payments
|
NEW: Page to list expense report payments
|
||||||
NEW: JS inventory autocalc input
|
NEW: JS inventory autocalc input
|
||||||
NEW: language support for more emailing target selectors
|
NEW: language support for more emailing target selectors
|
||||||
NEW: leave requests: add field into type dictionary to block request if balance is negative
|
NEW: leave requests: add field into type dictionary to block request if balance is negative
|
||||||
NEW: MAIN_MAIL_AUTOCOPY_TO can accept several email and special keys
|
|
||||||
NEW: MAIN_SEARCH_CAT_OR_BY_DEFAULT const for search by category
|
|
||||||
NEW: Mass action "Close shipments"
|
NEW: Mass action "Close shipments"
|
||||||
NEW: Module BOM - Add tabs for nets Bom
|
NEW: Module BOM - add tabs for nets BOM
|
||||||
NEW: Module BOM - Add the possibility to add sub-BOMs to BOM
|
NEW: Module BOM - add the possibility to add sub-BOMs to BOM
|
||||||
NEW: Module Recruitment - Add a public page with all list of open job positions.
|
NEW: Module Recruitment - Add a public page with list of all open job positions.
|
||||||
NEW: Module Recruitment - Add a tab with list of application on the jobposition file.
|
NEW: Module Recruitment - Add a tab with list of application on the jobposition file.
|
||||||
NEW: Module website now supports the multicompany module
|
|
||||||
NEW: More mode for THEME_TOPMENU_DISABLE_IMAGE (2, 3, ...)
|
|
||||||
NEW: Add option to move checkbox column as first column on Thirdparty list (only few screens)
|
NEW: Add option to move checkbox column as first column on Thirdparty list (only few screens)
|
||||||
NEW: on redirect of page in website module, GET parameters are kept.
|
|
||||||
NEW: optional display warning icons on ticket list
|
|
||||||
NEW: option to default check "notify tier at creation" in ticket module
|
|
||||||
NEW: option update prices on proposal cloning
|
|
||||||
NEW: payment conditions enabling semi-automatic deposit creation (Issue #18439)
|
NEW: payment conditions enabling semi-automatic deposit creation (Issue #18439)
|
||||||
NEW: possibility to consume multiple batch
|
NEW: possibility to consume multiple batch
|
||||||
NEW: Reverse movement product consumption
|
NEW: Reverse movement product consumption
|
||||||
NEW: Send email to the supplier order contact
|
NEW: Send email to the supplier order contact
|
||||||
NEW: New permission to report time on timesheet.
|
NEW: add permission to report time on timesheet
|
||||||
|
NEW: Knowledge Management - add status "Obsolete" to KM articles
|
||||||
|
NEW: MRP - split consumption line on MO
|
||||||
|
NEW: MRP - display physical and virtual stock of the products when creating OF from a BOM
|
||||||
|
NEW: MRP - display product ref in "Object link" product tab for BOM
|
||||||
|
NEW: Orders - support user_modif in order
|
||||||
|
NEW: Products - add massaction "Edit Extrafield" for Product
|
||||||
|
NEW: Products - List - add thumbnail field in product list
|
||||||
|
NEW: Products - Statistics - can filter on a thirdparty
|
||||||
|
NEW: Projects - add filter "opportunity status" on statistics of projects.
|
||||||
|
NEW: Proposals - option update prices on proposal cloning
|
||||||
|
NEW: Proposals - List - add column date of Signature on proposal list
|
||||||
NEW: SEPA XML - option to place payment Type Info at Credit transfer Transaction level
|
NEW: SEPA XML - option to place payment Type Info at Credit transfer Transaction level
|
||||||
NEW: Show number of votes into the label of tab "Results" of a survey
|
NEW: Stocks - stock filter in reassort lists
|
||||||
NEW: Some core tables are created only at module activation
|
NEW: Stocks - stock limit in stock export CSV
|
||||||
NEW: split consumption line on MO
|
NEW: Stocks - Inventory - can change value of AWP during the inventory
|
||||||
NEW: stock filter in reassort lists
|
|
||||||
NEW: stock limit in stock export CSV
|
|
||||||
NEW: Supplier order - Show ref supplier of reception in linked object block
|
NEW: Supplier order - Show ref supplier of reception in linked object block
|
||||||
NEW: support user_modif in order
|
NEW: Surveys - Show number of votes into the label of tab "Results" of a survey
|
||||||
NEW: TakePOS - barcode rule to insert product in TakePOS
|
NEW: TakePOS - barcode rule to insert product in TakePOS
|
||||||
NEW: TakePOS - pagination on search results
|
NEW: TakePOS - pagination on search results
|
||||||
NEW: TakePOS - show product reference
|
NEW: TakePOS - show product reference
|
||||||
NEW: The backup tools has an "lowmemory" option for mysqldump on large database
|
NEW: TakePOS - add constant to hide categories
|
||||||
|
NEW: TakePOS - add constant to show category description
|
||||||
|
NEW: TakePOS - add constant to show only the products in stock
|
||||||
|
NEW: Themes - add param color button action
|
||||||
|
NEW: Themes - Change in theme colors does not need to use the refresh button
|
||||||
|
NEW: Themes - more modes for THEME_TOPMENU_DISABLE_IMAGE (2, 3, ...)
|
||||||
|
NEW: Themes - MD - add param border table for md theme
|
||||||
|
NEW: Third-Parties - add rules "customer accountancy code" is mandatory to validate invoice
|
||||||
|
NEW: Third-Parties - can set the parent company during the creation of thirdparty (action=add of societe/card.php)
|
||||||
|
NEW: Tickets - allow a Ticket to be automatically marked as read when created from backend
|
||||||
|
NEW: Tickets - create Third-party with contact if not found on public ticket
|
||||||
|
NEW: Tickets - option to default check "notify tier at creation"
|
||||||
|
NEW: Tickets - Trigger: allow to automatically send messages on new tickets
|
||||||
|
NEW: Tickets - optional display warning icons on ticket list
|
||||||
|
NEW: Websites Module - supports now the multicompany module
|
||||||
|
NEW: Websites Module - on redirect of page in website module, GET parameters are kept.
|
||||||
NEW: The 'reposition' class works on ajax constantonoff that make redirects
|
NEW: The 'reposition' class works on ajax constantonoff that make redirects
|
||||||
NEW: Thirdparty - Add rules "customer accountancy code" is mandatory to validate invoice
|
|
||||||
NEW: thumbnail field in product list
|
|
||||||
NEW: total mark rate in list
|
NEW: total mark rate in list
|
||||||
NEW: uncheck "send message" by default on a ticket when private messages has been checked
|
NEW: uncheck "send message" by default on a ticket when private messages has been checked
|
||||||
NEW: VAT Report by month - Show detail by rate and also by code
|
NEW: VAT Report by month - Show detail by rate and also by code
|
||||||
NEW: Ticket triggers: allow to automatically send messages on new tickets
|
|
||||||
NEW: Accountancy - Add hidden feature for accounting reconciliation
|
|
||||||
NEW: Can store the session into database (instead of beeing managed by PHP)
|
|
||||||
NEW: Added MMK currency (Myanmar Kyat)
|
NEW: Added MMK currency (Myanmar Kyat)
|
||||||
|
NEW: On a form to send an email, we show all emails of contacts of object
|
||||||
|
|
||||||
Modules
|
Modules state
|
||||||
NEW: Module Partnership Management
|
NEW: Module Partnership Management - stable
|
||||||
NEW: Module Event Organization Management
|
NEW: Module Event Organization Management - stable
|
||||||
|
|
||||||
|
|
||||||
For developers or integrators:
|
For developers or integrators:
|
||||||
@ -149,7 +234,6 @@ For developers or integrators:
|
|||||||
NEW: dol_uncompress() supports more extensions (.gz, .bz2, .zstd). Only .zip was supported before.
|
NEW: dol_uncompress() supports more extensions (.gz, .bz2, .zstd). Only .zip was supported before.
|
||||||
NEW: Implement a generic method for Kaban views
|
NEW: Implement a generic method for Kaban views
|
||||||
NEW: Upgrade chartjs library to 3.7.1
|
NEW: Upgrade chartjs library to 3.7.1
|
||||||
NEW: update rank line is possible on API for customer invoices, sales orders and supplier invoice
|
|
||||||
NEW: stripe element with more gateways
|
NEW: stripe element with more gateways
|
||||||
NEW: solde() function evolution to be able to get solde until a chosen date
|
NEW: solde() function evolution to be able to get solde until a chosen date
|
||||||
NEW: Suggest a way to run upgrade per entities.
|
NEW: Suggest a way to run upgrade per entities.
|
||||||
@ -158,41 +242,38 @@ NEW: ModuleBuilder - Add tabs view in module builder
|
|||||||
NEW: ModuleBuilder - More feature that can be modifed after module generation
|
NEW: ModuleBuilder - More feature that can be modifed after module generation
|
||||||
NEW: Identification of tr is possible with by attribute data-id on some pages
|
NEW: Identification of tr is possible with by attribute data-id on some pages
|
||||||
NEW: Import with select boxes V2
|
NEW: Import with select boxes V2
|
||||||
NEW: Can update rank of invoice, proposal and order lines with API update
|
|
||||||
NEW: Can use current entity filter on 'chkbxlst'
|
NEW: Can use current entity filter on 'chkbxlst'
|
||||||
NEW: Creation of the function select_bom() used to display bom select list
|
NEW: Creation of the function select_bom() used to display bom select list
|
||||||
NEW: add printFieldListWhere hook in product reassort card
|
|
||||||
NEW: Add trigger and event on completely received status change
|
NEW: Add trigger and event on completely received status change
|
||||||
NEW: Add utility function send backup by mail
|
NEW: Add utility function send backup by mail
|
||||||
NEW: add WordPress OAuth to save a token (not SSO)
|
NEW: add WordPress OAuth to save a token (not SSO)
|
||||||
NEW: A module can embed a sql script run at each Dolibarr upgrade
|
NEW: A module can embed a SQL script run at each Dolibarr upgrade
|
||||||
NEW: API Proposals - Add POST lines
|
|
||||||
NEW: API REST filter states by country
|
|
||||||
NEW: Add option INVOICEREC_SET_AUTOFILL_DATE_START/END
|
|
||||||
NEW: Add option MAIN_API_DEBUG to save API logs into a file
|
|
||||||
NEW: Add param to keep the robot=index meta tag on public pages
|
NEW: Add param to keep the robot=index meta tag on public pages
|
||||||
NEW: Add method hintindex() in database handlers.
|
NEW: Add method hintindex() in database handlers.
|
||||||
NEW: add modifications for new function "$db->prefix()"
|
NEW: add modifications for new function "$db->prefix()"
|
||||||
NEW: addMoreActionsButtonsList hook for button in list
|
NEW: addMoreActionsButtonsList hook for button in list
|
||||||
NEW: Add API to get a template invoice
|
|
||||||
NEW: Standardize a lot of code.
|
NEW: Standardize a lot of code.
|
||||||
NEW: #20736 Allow extrafields SQL filters on REST API product lookup
|
|
||||||
NEW: #19294 implement detailed timespent in task of project API
|
|
||||||
NEW: Add a protection into PHPunit to avoid to forget a var_dump
|
NEW: Add a protection into PHPunit to avoid to forget a var_dump
|
||||||
|
|
||||||
|
|
||||||
|
API:
|
||||||
|
NEW: API Proposals - Add POST lines
|
||||||
|
NEW: API REST filter states by country
|
||||||
|
NEW: Add API to get a template invoice
|
||||||
NEW: Add datem and type parameters to API to create movements
|
NEW: Add datem and type parameters to API to create movements
|
||||||
NEW: Add hidden option on contract PDF line to hide qty and price
|
NEW: #19294 implement detailed timespent in task of project API
|
||||||
NEW: Option MAIL_MASS_ACTION_ADD_LAST_IF_MAIN_DOC_NOT_FOUND to send last document in mass mailing action
|
NEW: #20736 Allow extrafields SQL filters on REST API product lookup
|
||||||
|
NEW: Can update rank of invoice, proposal and order lines with API update
|
||||||
|
NEW: update rank line is possible on API for customer invoices, sales orders and supplier invoice
|
||||||
|
NEW: Add option MAIN_API_DEBUG to save API logs into a file
|
||||||
|
|
||||||
Hooks:
|
Hooks:
|
||||||
NEW: Hook getNomUrl available everywhere in tooltip of ref links
|
NEW: Hook getNomUrl available everywhere in tooltip of ref links
|
||||||
NEW: Add hooks: selectContactListWhere hook, selectThirdpartyListWhere hook
|
NEW: Add hooks: selectContactListWhere hook, selectThirdpartyListWhere hook
|
||||||
NEW: TakePos - add hooks complete product display
|
|
||||||
NEW: TakePos - add hooks for cart display
|
|
||||||
NEW: TakePos - add hooks to complete ajax return array
|
|
||||||
NEW: Add hook before the public ticket list
|
NEW: Add hook before the public ticket list
|
||||||
NEW: Add hook doaction in takepos invoice
|
NEW: Add hook for Notif
|
||||||
NEW: Add Hook for Notif
|
|
||||||
NEW: Add hook for more buttons
|
NEW: Add hook for more buttons
|
||||||
|
NEW: add hook printFieldListWhere in product ressort card
|
||||||
NEW: Add hook printFieldListWhere in "show_contacts" function
|
NEW: Add hook printFieldListWhere in "show_contacts" function
|
||||||
NEW: Add hook printFieldWhere in load_state_board function
|
NEW: Add hook printFieldWhere in load_state_board function
|
||||||
NEW: Add hooks contact tab badge and hooks parameter for avoid conflicts
|
NEW: Add hooks contact tab badge and hooks parameter for avoid conflicts
|
||||||
@ -204,7 +285,18 @@ NEW: Add hooks on project task time page
|
|||||||
NEW: Add hooks on salaries and sociales card
|
NEW: Add hooks on salaries and sociales card
|
||||||
NEW: Add hooks select product list and select thirdparty list function
|
NEW: Add hooks select product list and select thirdparty list function
|
||||||
NEW: Add hook to getSellPrice function
|
NEW: Add hook to getSellPrice function
|
||||||
|
NEW: TakePos - add hooks complete product display
|
||||||
|
NEW: TakePos - add hooks for cart display
|
||||||
|
NEW: TakePos - add hooks to complete ajax return array
|
||||||
|
NEW: TakePOS - add hook doaction in TakePOS invoice
|
||||||
|
|
||||||
|
Config Options:
|
||||||
|
NEW: Add hidden option on contract PDF line to hide qty and price
|
||||||
|
NEW: Option MAIL_MASS_ACTION_ADD_LAST_IF_MAIN_DOC_NOT_FOUND to send last document in mass mailing action
|
||||||
|
NEW: Option MAIN_API_DEBUG to save API logs into a file
|
||||||
|
NEW: Option MAIN_MAIL_AUTOCOPY_TO can accept several email and special keys
|
||||||
|
NEW: Option MAIN_SEARCH_CAT_OR_BY_DEFAULT const for search by category
|
||||||
|
NEW: Option INVOICEREC_SET_AUTOFILL_DATE_START/END
|
||||||
|
|
||||||
WARNING:
|
WARNING:
|
||||||
|
|
||||||
@ -223,6 +315,7 @@ Following changes may create regressions for some external modules, but were nec
|
|||||||
* Method fetch_all of DolResource has been renamed into fetchAll() to match naming conventions.
|
* Method fetch_all of DolResource has been renamed into fetchAll() to match naming conventions.
|
||||||
* The hook 'upgrade' and 'doUpgrade2" has been renamed 'doUpgradeBefore' and 'doUpgradeAfterDB'. A new trigger 'doUpgradeAfterFiles' has been introduced.
|
* The hook 'upgrade' and 'doUpgrade2" has been renamed 'doUpgradeBefore' and 'doUpgradeAfterDB'. A new trigger 'doUpgradeAfterFiles' has been introduced.
|
||||||
* The context hook 'suppliercard' when on the supplier tab of a thirdparty has been renamed into 'thirdpartysupplier'
|
* The context hook 'suppliercard' when on the supplier tab of a thirdparty has been renamed into 'thirdpartysupplier'
|
||||||
|
* Because the module Resources highly linked to the Agenda module, the menu for Resources module has been moved into top menu Agenda.
|
||||||
|
|
||||||
|
|
||||||
***** ChangeLog for 15.0.3 compared to 15.0.2 *****
|
***** ChangeLog for 15.0.3 compared to 15.0.2 *****
|
||||||
|
|||||||
@ -56,6 +56,10 @@ Vous pouvez aussi utiliser un serveur Web et une base de données prise en charg
|
|||||||
|
|
||||||
Pour mettre à jour Dolibarr depuis une vieille version vers celle ci:
|
Pour mettre à jour Dolibarr depuis une vieille version vers celle ci:
|
||||||
|
|
||||||
|
- Faites une sauvegarde de votre instance [voir ce tutorial](https://wiki.dolibarr.org/index.php/Installation_-_Upgrade#Upgrade_Dolibarr)
|
||||||
|
|
||||||
|
- Vérifiez que la nouvelle version est compatible avec la version PHP de votre serveur [voir PHP support](https://wiki.dolibarr.org/index.php/Releases).
|
||||||
|
|
||||||
- Ecrasez les vieux fichiers dans le vieux répertoire 'dolibarr' par les fichiers
|
- Ecrasez les vieux fichiers dans le vieux répertoire 'dolibarr' par les fichiers
|
||||||
fournis dans ce nouveau package.
|
fournis dans ce nouveau package.
|
||||||
|
|
||||||
|
|||||||
@ -81,7 +81,7 @@ If you don't have time to install it yourself, you can try some commercial 'read
|
|||||||
Dolibarr supports upgrading, usually without the need for any (commercial) support (depending on if you use any commercial extensions). It supports upgrading all the way from any version after 2.8 without breakage. This is unique in the ERP ecosystem and a benefit our users highly appreciate!
|
Dolibarr supports upgrading, usually without the need for any (commercial) support (depending on if you use any commercial extensions). It supports upgrading all the way from any version after 2.8 without breakage. This is unique in the ERP ecosystem and a benefit our users highly appreciate!
|
||||||
|
|
||||||
- At first make a backup of your Dolibarr files & then [see](https://wiki.dolibarr.org/index.php/Installation_-_Upgrade#Upgrade_Dolibarr)
|
- At first make a backup of your Dolibarr files & then [see](https://wiki.dolibarr.org/index.php/Installation_-_Upgrade#Upgrade_Dolibarr)
|
||||||
- Check that your installed PHP version is supported by the new version [see PHP support](./doc/phpmatrix.md).
|
- Check that your installed PHP version is supported by the new version [see PHP support](https://wiki.dolibarr.org/index.php/Releases).
|
||||||
- Overwrite all old files from 'dolibarr' directory with files provided into the new version's package.
|
- Overwrite all old files from 'dolibarr' directory with files provided into the new version's package.
|
||||||
- At first next access, Dolibarr will redirect you to the "install/" page to follow the upgrade process.
|
- At first next access, Dolibarr will redirect you to the "install/" page to follow the upgrade process.
|
||||||
If an `install.lock` file exists to lock any other upgrade process, the application will ask you to remove the file manually (you should find the `install.lock` file in the directory used to store generated and uploaded documents, in most cases, it is the directory called "*documents*").
|
If an `install.lock` file exists to lock any other upgrade process, the application will ask you to remove the file manually (you should find the `install.lock` file in the directory used to store generated and uploaded documents, in most cases, it is the directory called "*documents*").
|
||||||
|
|||||||
@ -19,7 +19,6 @@ Depends: libapache2-mod-php5 | libapache2-mod-php5filter | php5-cgi | php5-fpm |
|
|||||||
php-pear, php-mail-mime,
|
php-pear, php-mail-mime,
|
||||||
# php-tcpdf,
|
# php-tcpdf,
|
||||||
# libfpdf-tpl-php, php-fpdf,
|
# libfpdf-tpl-php, php-fpdf,
|
||||||
# libphp-adodb,
|
|
||||||
# libnusoap-php,
|
# libnusoap-php,
|
||||||
# libphp-pclzip,
|
# libphp-pclzip,
|
||||||
# Required javascript libraries
|
# Required javascript libraries
|
||||||
|
|||||||
@ -61,31 +61,6 @@ License: GPL-3+
|
|||||||
|
|
||||||
------------------------------------------------------------
|
------------------------------------------------------------
|
||||||
|
|
||||||
Files: htdocs/includes/adodbtime/*
|
|
||||||
Copyright: 2003-2005, John Lim
|
|
||||||
unknown, jackbbs
|
|
||||||
License: BSD-3-Clause
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions
|
|
||||||
are met:
|
|
||||||
.
|
|
||||||
Redistributions of source code must retain the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer.
|
|
||||||
.
|
|
||||||
Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer in the documentation
|
|
||||||
and/or other materials provided with the distribution.
|
|
||||||
.
|
|
||||||
Neither the name of the John Lim nor the names of its contributors may be
|
|
||||||
used to endorse or promote products derived from this software without
|
|
||||||
specific prior written permission.
|
|
||||||
Comment:
|
|
||||||
Those files are not shipped in the binary package since we use
|
|
||||||
the library as packaged in "libphp-adodb".
|
|
||||||
|
|
||||||
|
|
||||||
------------------------------------------------------------
|
|
||||||
|
|
||||||
Files: htdocs/includes/ckeditor/*
|
Files: htdocs/includes/ckeditor/*
|
||||||
Copyright: 2003-2012 CKSource - Frederico Knabben
|
Copyright: 2003-2012 CKSource - Frederico Knabben
|
||||||
License: GPL-2+
|
License: GPL-2+
|
||||||
|
|||||||
@ -146,7 +146,6 @@ case "$1" in
|
|||||||
#else
|
#else
|
||||||
# File already exist. We add params not found.
|
# File already exist. We add params not found.
|
||||||
#echo Add new params to overwrite path to use shared libraries/fonts
|
#echo Add new params to overwrite path to use shared libraries/fonts
|
||||||
#grep -q -c "dolibarr_lib_ADODB_PATH" $config || [ ! -d "/usr/share/php/adodb" ] || echo "<?php \$dolibarr_lib_ADODB_PATH='/usr/share/php/adodb'; ?>" >> $config
|
|
||||||
##grep -q -c "dolibarr_lib_GEOIP_PATH" $config || echo "<?php \$dolibarr_lib_GEOIP_PATH=''; ?>" >> $config
|
##grep -q -c "dolibarr_lib_GEOIP_PATH" $config || echo "<?php \$dolibarr_lib_GEOIP_PATH=''; ?>" >> $config
|
||||||
#grep -q -c "dolibarr_lib_NUSOAP_PATH" $config || [ ! -d "/usr/share/php/nusoap" ] || echo "<?php \$dolibarr_lib_NUSOAP_PATH='/usr/share/php/nusoap'; ?>" >> $config
|
#grep -q -c "dolibarr_lib_NUSOAP_PATH" $config || [ ! -d "/usr/share/php/nusoap" ] || echo "<?php \$dolibarr_lib_NUSOAP_PATH='/usr/share/php/nusoap'; ?>" >> $config
|
||||||
#grep -q -c "dolibarr_lib_ODTPHP_PATHTOPCLZIP" $config || [ ! -d "/usr/share/php/libphp-pclzip" ] || echo "<?php \$dolibarr_lib_ODTPHP_PATHTOPCLZIP='/usr/share/php/libphp-pclzip'; ?>" >> $config
|
#grep -q -c "dolibarr_lib_ODTPHP_PATHTOPCLZIP" $config || [ ! -d "/usr/share/php/libphp-pclzip" ] || echo "<?php \$dolibarr_lib_ODTPHP_PATHTOPCLZIP='/usr/share/php/libphp-pclzip'; ?>" >> $config
|
||||||
|
|||||||
@ -31,7 +31,6 @@ $force_install_distrib='debian';
|
|||||||
// - not removed from package (see rm in rules file),
|
// - not removed from package (see rm in rules file),
|
||||||
// - declared into dependencies (see Depends in control file)
|
// - declared into dependencies (see Depends in control file)
|
||||||
//$force_dolibarr_lib_TCPDF_PATH='';
|
//$force_dolibarr_lib_TCPDF_PATH='';
|
||||||
//$force_dolibarr_lib_ADODB_PATH='/usr/share/php/adodb';
|
|
||||||
//$force_dolibarr_lib_GEOIP_PATH='';
|
//$force_dolibarr_lib_GEOIP_PATH='';
|
||||||
//$force_dolibarr_lib_NUSOAP_PATH='/usr/share/php/nusoap';
|
//$force_dolibarr_lib_NUSOAP_PATH='/usr/share/php/nusoap';
|
||||||
//$force_dolibarr_lib_ODTPHP_PATHTOPCLZIP='/usr/share/php/libphp-pclzip';
|
//$force_dolibarr_lib_ODTPHP_PATHTOPCLZIP='/usr/share/php/libphp-pclzip';
|
||||||
|
|||||||
@ -89,7 +89,6 @@ override_dh_install:
|
|||||||
rm -fr build/zip
|
rm -fr build/zip
|
||||||
|
|
||||||
# clean from all PHP embedded libraries (we use package dependencies instead)
|
# clean from all PHP embedded libraries (we use package dependencies instead)
|
||||||
# rm -fr htdocs/includes/adodbtime
|
|
||||||
# rm -fr htdocs/includes/geoip
|
# rm -fr htdocs/includes/geoip
|
||||||
# rm -fr htdocs/includes/nusoap
|
# rm -fr htdocs/includes/nusoap
|
||||||
# rm -fr htdocs/includes/odtphp/zip/pclzip
|
# rm -fr htdocs/includes/odtphp/zip/pclzip
|
||||||
|
|||||||
@ -9,3 +9,5 @@ The build of .exe files need to have some windows executable files already insta
|
|||||||
|
|
||||||
If you have technical knowledge in web administration and plan to share your server instance (Apache, Mysql or PHP) with other projects than Dolibarr or want to use Dolibarr other components (PostgreSQL), you should not use this assistant and make a manual installation of Dolibarr on your existing server by downloading the standard package (.tgz or .zip file).
|
If you have technical knowledge in web administration and plan to share your server instance (Apache, Mysql or PHP) with other projects than Dolibarr or want to use Dolibarr other components (PostgreSQL), you should not use this assistant and make a manual installation of Dolibarr on your existing server by downloading the standard package (.tgz or .zip file).
|
||||||
|
|
||||||
|
|
||||||
|
!!! See file ../makepack-howto.txt
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/* !!! DO NOT EDIT THIS FILE, EDIT config.inc.php INSTEAD !!! */
|
/* !!! DO NOT EDIT THIS FILE, EDIT config.inc.php INSTEAD !!! */
|
||||||
|
|
||||||
// vim: expandtab sw=4 ts=4 sts=4:
|
// vim: expandtab sw=4 ts=4 sts=4:
|
||||||
|
|||||||
@ -582,6 +582,17 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
if browser = 'iexplore.exe' then
|
||||||
|
begin
|
||||||
|
if FileExists (pfPath+'/Microsoft/Edge/Application/msedge.exe') then
|
||||||
|
begin
|
||||||
|
if MsgBox(CustomMessage('MicrosoftEdgeDetected'),mbConfirmation,MB_YESNO) = IDYES then
|
||||||
|
begin
|
||||||
|
browser := pfPath+'/Microsoft/Edge/Application/msedge.exe';
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
if browser = 'iexplore.exe' then
|
if browser = 'iexplore.exe' then
|
||||||
begin
|
begin
|
||||||
if FileExists (pfPath+'/Internet Explorer/iexplore.exe') then
|
if FileExists (pfPath+'/Internet Explorer/iexplore.exe') then
|
||||||
|
|||||||
@ -56,7 +56,7 @@ if (empty($argv[1])) {
|
|||||||
|
|
||||||
$i=0;
|
$i=0;
|
||||||
while ($i < $argc) {
|
while ($i < $argc) {
|
||||||
if (! empty($argv[$i])) {
|
if (!empty($argv[$i])) {
|
||||||
parse_str($argv[$i]); // set all params $release, $includecustom, $includeconstant, $buildzip ...
|
parse_str($argv[$i]); // set all params $release, $includecustom, $includeconstant, $buildzip ...
|
||||||
}
|
}
|
||||||
if (preg_match('/includeconstant=/', $argv[$i])) {
|
if (preg_match('/includeconstant=/', $argv[$i])) {
|
||||||
|
|||||||
@ -632,7 +632,7 @@ if ($nboftargetok) {
|
|||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tecnickcom/tcpdf/fonts/freefont-*`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tecnickcom/tcpdf/fonts/freefont-*`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tecnickcom/tcpdf/fonts/ae_fonts_*`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tecnickcom/tcpdf/fonts/ae_fonts_*`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tecnickcom/tcpdf/fonts/utils`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tecnickcom/tcpdf/fonts/utils`;
|
||||||
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/tecnickcom/tcpdf/tools`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tecnickcom/tcpdf/tools`;
|
||||||
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/vendor`;
|
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/vendor`;
|
||||||
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/webmozart`;
|
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/webmozart`;
|
||||||
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/autoload.php`;
|
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/autoload.php`;
|
||||||
|
|||||||
@ -293,6 +293,7 @@ foreach my $PROJECT (@PROJECTLIST) {
|
|||||||
}
|
}
|
||||||
print "Clean $BUILDROOT\n";
|
print "Clean $BUILDROOT\n";
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECTLC/.cache`;
|
$ret=`rm -fr $BUILDROOT/$PROJECTLC/.cache`;
|
||||||
|
$ret=`rm -fr $BUILDROOT/$PROJECTLC/.git`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECTLC/.project`;
|
$ret=`rm -fr $BUILDROOT/$PROJECTLC/.project`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECTLC/.settings`;
|
$ret=`rm -fr $BUILDROOT/$PROJECTLC/.settings`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECTLC/index.php`;
|
$ret=`rm -fr $BUILDROOT/$PROJECTLC/index.php`;
|
||||||
|
|||||||
@ -8,13 +8,13 @@ of Dolibarr. There is a chapter for BETA version and a chapter for RELEASE versi
|
|||||||
Prerequisites to build tgz, debian and rpm packages:
|
Prerequisites to build tgz, debian and rpm packages:
|
||||||
> apt-get install perl tar dpkg dpatch p7zip-full rpm zip php-cli
|
> apt-get install perl tar dpkg dpatch p7zip-full rpm zip php-cli
|
||||||
|
|
||||||
Prerequisites to build autoexe DoliWamp package:
|
Prerequisites to build autoexe DoliWamp package from Linux (solution seems broken since Ubuntu 20.04):
|
||||||
> apt-get install wine q4wine
|
> apt-get install wine q4wine
|
||||||
> Launch "wine cmd" to check a drive Z: pointing to / exists.
|
> Launch "wine cmd" to check a drive Z: pointing to / exists.
|
||||||
> Install InnoSetup
|
> Install InnoSetup
|
||||||
For example by running isetup-5.5.8.exe (https://www.jrsoftware.org) https://files.jrsoftware.org/is/5/
|
For example by running isetup-5.5.8.exe (https://www.jrsoftware.org) https://files.jrsoftware.org/is/5/
|
||||||
> Install WampServer into "C:\wamp64" to have Apache, PHP and MariaDB
|
> Install WampServer into "C:\wamp64" to have Apache, PHP and MariaDB
|
||||||
For example by running wampserver3.2.0_x64.exe (https://www.wampserver.com).
|
For example by running wampserver3.2.6_x64.exe (https://www.wampserver.com).
|
||||||
See file build/exe/doliwamp.iss to know the doliwamp version currently setup.
|
See file build/exe/doliwamp.iss to know the doliwamp version currently setup.
|
||||||
> Add path to ISCC into PATH windows var:
|
> Add path to ISCC into PATH windows var:
|
||||||
Launch wine cmd, then regedit and add entry int HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment\PATH
|
Launch wine cmd, then regedit and add entry int HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment\PATH
|
||||||
@ -25,9 +25,21 @@ Prerequisites to build autoexe DoliWamp package:
|
|||||||
|
|
||||||
***** Prerequisites For Windows *****
|
***** Prerequisites For Windows *****
|
||||||
|
|
||||||
Install Perl
|
Prerequisites to build autoexe DoliWamp package from Windows:
|
||||||
Install WampServer-3.2.*-64.exe
|
|
||||||
isetup-5.5.8.exe
|
> Install Perl for Windwos (https://strawberryperl.com/)
|
||||||
|
> Install isetup-5.5.8.exe (https://www.jrsoftware.org)
|
||||||
|
> Install WampServer-3.2.*-64.exe (Apache 2.4.51, PHP 7.3.33, MariaDB 10.6.5 for example. Version must match the values found into doliwamp.iss)
|
||||||
|
> Install GIT for Windows (https://git-scm.com/ => You must choose option "Add Git bash profile", "Git commit as-is")
|
||||||
|
> Install Dolibarr verions:
|
||||||
|
git clone https://github.com/dolibarr/dolibarr
|
||||||
|
|
||||||
|
> Add the path of PHP (C:\wamp64\bin\php\php7.3.33) and InnoSetup (C:\Program Files (x86)\Inno Setup 5) into the %PATH% of Windows.
|
||||||
|
|
||||||
|
> Create a config file c:\dolibarr\dolibarr\htdocs\conf\conf.php with content
|
||||||
|
<?php
|
||||||
|
$dolibarr_main_document_root="c:\dolibarr\dolibarr\htdocs";
|
||||||
|
$dolibarr_main_url_root='http://localhost';
|
||||||
|
|
||||||
|
|
||||||
***** Actions to do a BETA *****
|
***** Actions to do a BETA *****
|
||||||
|
|||||||
@ -25,7 +25,7 @@ BuildArch: noarch
|
|||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
|
|
||||||
Group: Applications/Productivity
|
Group: Applications/Productivity
|
||||||
Requires: httpd, php >= 5.3.0, php-cli, php-gd, php-ldap, php-imap, php-mysqli, php-adodb, php-nusoap, dejavu-sans-fonts
|
Requires: httpd, php >= 5.3.0, php-cli, php-gd, php-ldap, php-imap, php-mysqli, php-nusoap, dejavu-sans-fonts
|
||||||
Requires: mysql-server, mysql
|
Requires: mysql-server, mysql
|
||||||
#BuildRequires: desktop-file-utils
|
#BuildRequires: desktop-file-utils
|
||||||
|
|
||||||
@ -104,7 +104,6 @@ cui hai bisogno ed essere facile da usare.
|
|||||||
%{__cp} -pr htdocs $RPM_BUILD_ROOT%{_datadir}/%{name}
|
%{__cp} -pr htdocs $RPM_BUILD_ROOT%{_datadir}/%{name}
|
||||||
%{__cp} -pr scripts $RPM_BUILD_ROOT%{_datadir}/%{name}
|
%{__cp} -pr scripts $RPM_BUILD_ROOT%{_datadir}/%{name}
|
||||||
%{__rm} -rf $RPM_BUILD_ROOT%{_datadir}/%{name}/htdocs/includes/ckeditor/_source
|
%{__rm} -rf $RPM_BUILD_ROOT%{_datadir}/%{name}/htdocs/includes/ckeditor/_source
|
||||||
%{__rm} -rf $RPM_BUILD_ROOT%{_datadir}/%{name}/htdocs/includes/adodbtime
|
|
||||||
%{__rm} -rf $RPM_BUILD_ROOT%{_datadir}/%{name}/htdocs/includes/nusoap
|
%{__rm} -rf $RPM_BUILD_ROOT%{_datadir}/%{name}/htdocs/includes/nusoap
|
||||||
%{__rm} -rf $RPM_BUILD_ROOT%{_datadir}/%{name}/htdocs/includes/fonts
|
%{__rm} -rf $RPM_BUILD_ROOT%{_datadir}/%{name}/htdocs/includes/fonts
|
||||||
|
|
||||||
@ -274,7 +273,6 @@ if [ -s $config ] && grep -q "File generated by" $config
|
|||||||
then
|
then
|
||||||
# File already exist. We add params not found.
|
# File already exist. We add params not found.
|
||||||
echo Add new params to overwrite path to use shared libraries/fonts
|
echo Add new params to overwrite path to use shared libraries/fonts
|
||||||
grep -q -c "dolibarr_lib_ADODB_PATH" $config || [ ! -d "/usr/share/php/adodb" ] || echo "<?php \$dolibarr_lib_ADODB_PATH='/usr/share/php/adodb'; ?>" >> $config
|
|
||||||
grep -q -c "dolibarr_lib_FPDI_PATH" $config || [ ! -d "/usr/share/php/fpdi" ] || echo "<?php \$dolibarr_lib_FPDI_PATH='/usr/share/php/fpdi'; ?>" >> $config
|
grep -q -c "dolibarr_lib_FPDI_PATH" $config || [ ! -d "/usr/share/php/fpdi" ] || echo "<?php \$dolibarr_lib_FPDI_PATH='/usr/share/php/fpdi'; ?>" >> $config
|
||||||
#grep -q -c "dolibarr_lib_GEOIP_PATH" $config || echo "<?php \$dolibarr_lib_GEOIP_PATH=''; ?>" >> $config
|
#grep -q -c "dolibarr_lib_GEOIP_PATH" $config || echo "<?php \$dolibarr_lib_GEOIP_PATH=''; ?>" >> $config
|
||||||
grep -q -c "dolibarr_lib_NUSOAP_PATH" $config || [ ! -d "/usr/share/php/nusoap" ] || echo "<?php \$dolibarr_lib_NUSOAP_PATH='/usr/share/php/nusoap'; ?>" >> $config
|
grep -q -c "dolibarr_lib_NUSOAP_PATH" $config || [ ! -d "/usr/share/php/nusoap" ] || echo "<?php \$dolibarr_lib_NUSOAP_PATH='/usr/share/php/nusoap'; ?>" >> $config
|
||||||
|
|||||||
@ -46,7 +46,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
|||||||
|
|
||||||
%if 0%{?fedora} || 0%{?rhel_version} || 0%{?centos_version}
|
%if 0%{?fedora} || 0%{?rhel_version} || 0%{?centos_version}
|
||||||
Group: Applications/Productivity
|
Group: Applications/Productivity
|
||||||
Requires: httpd, php >= 5.3.0, php-cli, php-gd, php-ldap, php-imap, php-mysqli, php-adodb, php-nusoap, dejavu-sans-fonts, php-mbstring, php-xml
|
Requires: httpd, php >= 5.3.0, php-cli, php-gd, php-ldap, php-imap, php-mysqli, php-nusoap, dejavu-sans-fonts, php-mbstring, php-xml
|
||||||
Requires: mysql-server, mysql
|
Requires: mysql-server, mysql
|
||||||
BuildRequires: desktop-file-utils
|
BuildRequires: desktop-file-utils
|
||||||
%else
|
%else
|
||||||
@ -58,7 +58,7 @@ Requires: mysql, mysql-client
|
|||||||
%if 0%{?suse_version}
|
%if 0%{?suse_version}
|
||||||
# Voir http://en.opensuse.org/openSUSE:Packaging_Conventions_RPM_Macros
|
# Voir http://en.opensuse.org/openSUSE:Packaging_Conventions_RPM_Macros
|
||||||
Group: Productivity/Office/Management
|
Group: Productivity/Office/Management
|
||||||
Requires: apache2, apache2-mod_php5, php5 >= 5.3.0, php5-gd, php5-ldap, php5-imap, php5-mysql, php5-openssl, dejavu
|
Requires: apache2, apache2-mod_php, php >= 5.3.0, php-gd, php-ldap, php-imap, php-mysql, php-openssl, dejavu
|
||||||
Requires: mysql-community-server, mysql-community-server-client
|
Requires: mysql-community-server, mysql-community-server-client
|
||||||
BuildRequires: update-desktop-files fdupes
|
BuildRequires: update-desktop-files fdupes
|
||||||
%else
|
%else
|
||||||
@ -169,7 +169,6 @@ cui hai bisogno ed essere facile da usare.
|
|||||||
%{__cp} -pr scripts $RPM_BUILD_ROOT%{_datadir}/%{name}
|
%{__cp} -pr scripts $RPM_BUILD_ROOT%{_datadir}/%{name}
|
||||||
%{__rm} -rf $RPM_BUILD_ROOT%{_datadir}/%{name}/htdocs/includes/ckeditor/_source
|
%{__rm} -rf $RPM_BUILD_ROOT%{_datadir}/%{name}/htdocs/includes/ckeditor/_source
|
||||||
%if 0%{?fedora} || 0%{?rhel_version} || 0%{?centos_version}
|
%if 0%{?fedora} || 0%{?rhel_version} || 0%{?centos_version}
|
||||||
%{__rm} -rf $RPM_BUILD_ROOT%{_datadir}/%{name}/htdocs/includes/adodbtime
|
|
||||||
%{__rm} -rf $RPM_BUILD_ROOT%{_datadir}/%{name}/htdocs/includes/nusoap
|
%{__rm} -rf $RPM_BUILD_ROOT%{_datadir}/%{name}/htdocs/includes/nusoap
|
||||||
%{__rm} -rf $RPM_BUILD_ROOT%{_datadir}/%{name}/htdocs/includes/fonts
|
%{__rm} -rf $RPM_BUILD_ROOT%{_datadir}/%{name}/htdocs/includes/fonts
|
||||||
%else
|
%else
|
||||||
@ -425,7 +424,6 @@ if [ -s $config ] && grep -q "File generated by" $config
|
|||||||
then
|
then
|
||||||
# File already exist. We add params not found.
|
# File already exist. We add params not found.
|
||||||
echo Add new params to overwrite path to use shared libraries/fonts
|
echo Add new params to overwrite path to use shared libraries/fonts
|
||||||
grep -q -c "dolibarr_lib_ADODB_PATH" $config || [ ! -d "/usr/share/php/adodb" ] || echo "<?php \$dolibarr_lib_ADODB_PATH='/usr/share/php/adodb'; ?>" >> $config
|
|
||||||
grep -q -c "dolibarr_lib_FPDI_PATH" $config || [ ! -d "/usr/share/php/fpdi" ] || echo "<?php \$dolibarr_lib_FPDI_PATH='/usr/share/php/fpdi'; ?>" >> $config
|
grep -q -c "dolibarr_lib_FPDI_PATH" $config || [ ! -d "/usr/share/php/fpdi" ] || echo "<?php \$dolibarr_lib_FPDI_PATH='/usr/share/php/fpdi'; ?>" >> $config
|
||||||
#grep -q -c "dolibarr_lib_GEOIP_PATH" $config || echo "<?php \$dolibarr_lib_GEOIP_PATH=''; ?>" >> $config
|
#grep -q -c "dolibarr_lib_GEOIP_PATH" $config || echo "<?php \$dolibarr_lib_GEOIP_PATH=''; ?>" >> $config
|
||||||
grep -q -c "dolibarr_lib_NUSOAP_PATH" $config || [ ! -d "/usr/share/php/nusoap" ] || echo "<?php \$dolibarr_lib_NUSOAP_PATH='/usr/share/php/nusoap'; ?>" >> $config
|
grep -q -c "dolibarr_lib_NUSOAP_PATH" $config || [ ! -d "/usr/share/php/nusoap" ] || echo "<?php \$dolibarr_lib_NUSOAP_PATH='/usr/share/php/nusoap'; ?>" >> $config
|
||||||
|
|||||||
@ -271,7 +271,6 @@ if [ -s $config ] && grep -q "File generated by" $config
|
|||||||
then
|
then
|
||||||
# File already exist. We add params not found.
|
# File already exist. We add params not found.
|
||||||
echo Add new params to overwrite path to use shared libraries/fonts
|
echo Add new params to overwrite path to use shared libraries/fonts
|
||||||
grep -q -c "dolibarr_lib_ADODB_PATH" $config || [ ! -d "/usr/share/php/adodb" ] || echo "<?php \$dolibarr_lib_ADODB_PATH='/usr/share/php/adodb'; ?>" >> $config
|
|
||||||
grep -q -c "dolibarr_lib_FPDI_PATH" $config || [ ! -d "/usr/share/php/fpdi" ] || echo "<?php \$dolibarr_lib_FPDI_PATH='/usr/share/php/fpdi'; ?>" >> $config
|
grep -q -c "dolibarr_lib_FPDI_PATH" $config || [ ! -d "/usr/share/php/fpdi" ] || echo "<?php \$dolibarr_lib_FPDI_PATH='/usr/share/php/fpdi'; ?>" >> $config
|
||||||
#grep -q -c "dolibarr_lib_GEOIP_PATH" $config || echo "<?php \$dolibarr_lib_GEOIP_PATH=''; ?>" >> $config
|
#grep -q -c "dolibarr_lib_GEOIP_PATH" $config || echo "<?php \$dolibarr_lib_GEOIP_PATH=''; ?>" >> $config
|
||||||
grep -q -c "dolibarr_lib_NUSOAP_PATH" $config || [ ! -d "/usr/share/php/nusoap" ] || echo "<?php \$dolibarr_lib_NUSOAP_PATH='/usr/share/php/nusoap'; ?>" >> $config
|
grep -q -c "dolibarr_lib_NUSOAP_PATH" $config || [ ! -d "/usr/share/php/nusoap" ] || echo "<?php \$dolibarr_lib_NUSOAP_PATH='/usr/share/php/nusoap'; ?>" >> $config
|
||||||
|
|||||||
@ -25,7 +25,7 @@ BuildArch: noarch
|
|||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
|
|
||||||
Group: Productivity/Office/Management
|
Group: Productivity/Office/Management
|
||||||
Requires: apache2, apache2-mod_php5, php5 >= 5.3.0, php5-gd, php5-ldap, php5-imap, php5-mysql, php5-openssl, dejavu
|
Requires: apache2, apache2-mod_php, php >= 5.3.0, php-gd, php-ldap, php-imap, php-mysql, php-openssl, dejavu
|
||||||
Requires: mysql-community-server, mysql-community-server-client
|
Requires: mysql-community-server, mysql-community-server-client
|
||||||
%if 0%{?suse_version}
|
%if 0%{?suse_version}
|
||||||
BuildRequires: update-desktop-files fdupes
|
BuildRequires: update-desktop-files fdupes
|
||||||
@ -66,7 +66,6 @@ ed essere facile da usare.
|
|||||||
Programmo web, progettato per poter fornire solo ciò di
|
Programmo web, progettato per poter fornire solo ciò di
|
||||||
cui hai bisogno ed essere facile da usare.
|
cui hai bisogno ed essere facile da usare.
|
||||||
|
|
||||||
%_datadir/dolibarr/htdocs/webhook
|
|
||||||
|
|
||||||
#---- prep
|
#---- prep
|
||||||
%prep
|
%prep
|
||||||
@ -282,7 +281,6 @@ if [ -s $config ] && grep -q "File generated by" $config
|
|||||||
then
|
then
|
||||||
# File already exist. We add params not found.
|
# File already exist. We add params not found.
|
||||||
echo Add new params to overwrite path to use shared libraries/fonts
|
echo Add new params to overwrite path to use shared libraries/fonts
|
||||||
grep -q -c "dolibarr_lib_ADODB_PATH" $config || [ ! -d "/usr/share/php/adodb" ] || echo "<?php \$dolibarr_lib_ADODB_PATH='/usr/share/php/adodb'; ?>" >> $config
|
|
||||||
grep -q -c "dolibarr_lib_FPDI_PATH" $config || [ ! -d "/usr/share/php/fpdi" ] || echo "<?php \$dolibarr_lib_FPDI_PATH='/usr/share/php/fpdi'; ?>" >> $config
|
grep -q -c "dolibarr_lib_FPDI_PATH" $config || [ ! -d "/usr/share/php/fpdi" ] || echo "<?php \$dolibarr_lib_FPDI_PATH='/usr/share/php/fpdi'; ?>" >> $config
|
||||||
#grep -q -c "dolibarr_lib_GEOIP_PATH" $config || echo "<?php \$dolibarr_lib_GEOIP_PATH=''; ?>" >> $config
|
#grep -q -c "dolibarr_lib_GEOIP_PATH" $config || echo "<?php \$dolibarr_lib_GEOIP_PATH=''; ?>" >> $config
|
||||||
grep -q -c "dolibarr_lib_NUSOAP_PATH" $config || [ ! -d "/usr/share/php/nusoap" ] || echo "<?php \$dolibarr_lib_NUSOAP_PATH='/usr/share/php/nusoap'; ?>" >> $config
|
grep -q -c "dolibarr_lib_NUSOAP_PATH" $config || [ ! -d "/usr/share/php/nusoap" ] || echo "<?php \$dolibarr_lib_NUSOAP_PATH='/usr/share/php/nusoap'; ?>" >> $config
|
||||||
|
|||||||
@ -20,7 +20,6 @@ $force_install_lockinstall='444';
|
|||||||
$force_install_distrib='rpmfedora';
|
$force_install_distrib='rpmfedora';
|
||||||
|
|
||||||
// Value to overwrite path to use shared libraries/fonts instead of embedded one
|
// Value to overwrite path to use shared libraries/fonts instead of embedded one
|
||||||
$force_dolibarr_lib_ADODB_PATH='/usr/share/php/adodb';
|
|
||||||
//$force_dolibarr_lib_FPDI_PATH='/usr/share/php/fpdi';
|
//$force_dolibarr_lib_FPDI_PATH='/usr/share/php/fpdi';
|
||||||
//$force_dolibarr_lib_GEOIP_PATH='';
|
//$force_dolibarr_lib_GEOIP_PATH='';
|
||||||
$force_dolibarr_lib_NUSOAP_PATH='/usr/share/php/nusoap';
|
$force_dolibarr_lib_NUSOAP_PATH='/usr/share/php/nusoap';
|
||||||
|
|||||||
@ -20,7 +20,6 @@ $force_install_lockinstall='444';
|
|||||||
$force_install_distrib='rpmmandriva';
|
$force_install_distrib='rpmmandriva';
|
||||||
|
|
||||||
// Value to overwrite path to use shared libraries/fonts instead of embedded one
|
// Value to overwrite path to use shared libraries/fonts instead of embedded one
|
||||||
$force_dolibarr_lib_ADODB_PATH='/usr/share/php/adodb';
|
|
||||||
//$force_dolibarr_lib_FPDI_PATH='/usr/share/php/fpdi';
|
//$force_dolibarr_lib_FPDI_PATH='/usr/share/php/fpdi';
|
||||||
//$force_dolibarr_lib_GEOIP_PATH='';
|
//$force_dolibarr_lib_GEOIP_PATH='';
|
||||||
$force_dolibarr_lib_NUSOAP_PATH='/usr/share/php/nusoap';
|
$force_dolibarr_lib_NUSOAP_PATH='/usr/share/php/nusoap';
|
||||||
|
|||||||
@ -20,7 +20,6 @@ $force_install_lockinstall='444';
|
|||||||
$force_install_distrib='rpmopensuse';
|
$force_install_distrib='rpmopensuse';
|
||||||
|
|
||||||
// Value to overwrite path to use shared libraries/fonts instead of embedded one
|
// Value to overwrite path to use shared libraries/fonts instead of embedded one
|
||||||
//$force_dolibarr_lib_ADODB_PATH='/usr/share/php/adodb';
|
|
||||||
//$force_dolibarr_lib_FPDI_PATH='/usr/share/php/fpdi';
|
//$force_dolibarr_lib_FPDI_PATH='/usr/share/php/fpdi';
|
||||||
//$force_dolibarr_lib_GEOIP_PATH='';
|
//$force_dolibarr_lib_GEOIP_PATH='';
|
||||||
//$force_dolibarr_lib_NUSOAP_PATH='/usr/share/php/nusoap';
|
//$force_dolibarr_lib_NUSOAP_PATH='/usr/share/php/nusoap';
|
||||||
|
|||||||
@ -1,20 +1,21 @@
|
|||||||
# ldapsearch_sample1.txt
|
# ldapsearch_sample1.txt
|
||||||
# ldapsearch is into package ldap-utils on debian.
|
# ldapsearch is into package ldap-utils on debian.
|
||||||
#
|
#
|
||||||
# Use this sample to search into a ldap
|
# Use this samples to test a ldap_bind or to make a search into a ldap
|
||||||
#
|
#
|
||||||
|
|
||||||
# Anonymous access
|
# Anonymous access
|
||||||
# ldapsearch -h hostname -p 389
|
# ldapsearch -h hostname -p 389
|
||||||
#
|
#
|
||||||
# Login access (using a Bind DN)
|
# Login access (using a Bind DN)
|
||||||
|
# Such access must succeed to use LDAP as login module.
|
||||||
# ldapsearch -h hostname -p 389 -z 0 -D "uid=root,cn=users,dc=ldap,dc=test,dc=local" -w password
|
# ldapsearch -h hostname -p 389 -z 0 -D "uid=root,cn=users,dc=ldap,dc=test,dc=local" -w password
|
||||||
# ldapsearch -H ldap://hostname:389 -z 0 -D "uid=root,cn=users,dc=ldap,dc=test,dc=local" -w password
|
# ldapsearch -H ldap://hostname:389 -z 0 -D "uid=root,cn=users,dc=ldap,dc=test,dc=local" -w password
|
||||||
# ldapsearch -d1 -H ldap://hostname:389 -x -z 0 -D "uid=root,cn=users,dc=ldap,dc=test,dc=local" -w password
|
# ldapsearch -d1 -H ldap://hostname:389 -x -z 0 -D "uid=root,cn=users,dc=ldap,dc=test,dc=local" -w password
|
||||||
# ldapsearch -H ldap://hostname:389 -z 0 -D "uid=root,cn=users,dc=ldap,dc=test,dc=local" -w password
|
# ldapsearch -H ldap://hostname:389 -z 0 -D "uid=root,cn=users,dc=ldap,dc=test,dc=local" -w password
|
||||||
#
|
#
|
||||||
# Login access in SSL (using a Bind DN)
|
# Login access in SSL (using a Bind DN)
|
||||||
# ldapsearch -H ldaps://hostnamme:636 -z 0 -D "uid=root,cn=users,dc=ldap,dc=test,dc=local" -w password -b "cn=users,dc=ldap,dc=test,dc=local
|
# ldapsearch -H ldaps://hostnamme:636 -z 0 -D "uid=root,cn=users,dc=ldap,dc=test,dc=local" -w password -b "cn=users,dc=ldap,dc=test,dc=local"
|
||||||
# If it fails, you may try to use "hostname" that is real name of certificate.
|
# If it fails, you may try to use "hostname" that is real name of certificate.
|
||||||
# You must also check that /etc/ldap/ldap.conf contains the line TLS_CACERT /etc/ssl/certs/ca-certificates.crt
|
# You must also check that /etc/ldap/ldap.conf contains the line TLS_CACERT /etc/ssl/certs/ca-certificates.crt
|
||||||
|
|
||||||
|
|||||||
@ -10,7 +10,7 @@ const subscribeHook = (z, bundle) => {
|
|||||||
action: bundle.inputData.action
|
action: bundle.inputData.action
|
||||||
};
|
};
|
||||||
|
|
||||||
const url = bundle.authData.url + '/api/index.php/zapierapi/hook';
|
const url = bundle.authData.url + '/api/index.php/zapier/hook';
|
||||||
|
|
||||||
// You can build requests and our client will helpfully inject all the variables
|
// You can build requests and our client will helpfully inject all the variables
|
||||||
// you need to complete. You can also register middleware to control this.
|
// you need to complete. You can also register middleware to control this.
|
||||||
@ -32,7 +32,7 @@ const unsubscribeHook = (z, bundle) => {
|
|||||||
// You can build requests and our client will helpfully inject all the variables
|
// You can build requests and our client will helpfully inject all the variables
|
||||||
// you need to complete. You can also register middleware to control this.
|
// you need to complete. You can also register middleware to control this.
|
||||||
const options = {
|
const options = {
|
||||||
url: bundle.authData.url + '/api/index.php/zapierapi/hook/' + bundle.subscribeData.id,
|
url: bundle.authData.url + '/api/index.php/zapier/hook/' + bundle.subscribeData.id,
|
||||||
method: 'DELETE',
|
method: 'DELETE',
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -84,7 +84,7 @@ const getFallbackRealAction = (z, bundle) => {
|
|||||||
// // For the test poll, you should get some real data, to aid the setup process.
|
// // For the test poll, you should get some real data, to aid the setup process.
|
||||||
// const module = bundle.inputData.module;
|
// const module = bundle.inputData.module;
|
||||||
// const options = {
|
// const options = {
|
||||||
// url: bundle.authData.url + '/api/index.php/zapierapi/getactionschoices/actions',
|
// url: bundle.authData.url + '/api/index.php/zapier/getactionschoices/actions',
|
||||||
// };
|
// };
|
||||||
|
|
||||||
// return z.request(options).then((response) => JSON.parse(response.content));
|
// return z.request(options).then((response) => JSON.parse(response.content));
|
||||||
|
|||||||
@ -10,7 +10,7 @@ const subscribeHook = (z, bundle) => {
|
|||||||
action: bundle.inputData.action
|
action: bundle.inputData.action
|
||||||
};
|
};
|
||||||
|
|
||||||
const url = bundle.authData.url + '/api/index.php/zapierapi/hook';
|
const url = bundle.authData.url + '/api/index.php/zapier/hook';
|
||||||
|
|
||||||
// You can build requests and our client will helpfully inject all the variables
|
// You can build requests and our client will helpfully inject all the variables
|
||||||
// you need to complete. You can also register middleware to control this.
|
// you need to complete. You can also register middleware to control this.
|
||||||
@ -32,7 +32,7 @@ const unsubscribeHook = (z, bundle) => {
|
|||||||
// You can build requests and our client will helpfully inject all the variables
|
// You can build requests and our client will helpfully inject all the variables
|
||||||
// you need to complete. You can also register middleware to control this.
|
// you need to complete. You can also register middleware to control this.
|
||||||
const options = {
|
const options = {
|
||||||
url: bundle.authData.url + '/api/index.php/zapierapi/hook/' + bundle.subscribeData.id,
|
url: bundle.authData.url + '/api/index.php/zapier/hook/' + bundle.subscribeData.id,
|
||||||
method: 'DELETE',
|
method: 'DELETE',
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ const getFallbackRealContact = (z, bundle) => {
|
|||||||
// const getModulesChoices = (z/*, bundle*/) => {
|
// const getModulesChoices = (z/*, bundle*/) => {
|
||||||
// // For the test poll, you should get some real data, to aid the setup process.
|
// // For the test poll, you should get some real data, to aid the setup process.
|
||||||
// const options = {
|
// const options = {
|
||||||
// url: bundle.authData.url + '/api/index.php/zapierapi/getmoduleschoices',
|
// url: bundle.authData.url + '/api/index.php/zapier/getmoduleschoices',
|
||||||
// };
|
// };
|
||||||
|
|
||||||
// return z.request(options).then((response) => JSON.parse(response.content));
|
// return z.request(options).then((response) => JSON.parse(response.content));
|
||||||
@ -94,7 +94,7 @@ const getFallbackRealContact = (z, bundle) => {
|
|||||||
// // For the test poll, you should get some real data, to aid the setup process.
|
// // For the test poll, you should get some real data, to aid the setup process.
|
||||||
// const module = bundle.inputData.module;
|
// const module = bundle.inputData.module;
|
||||||
// const options = {
|
// const options = {
|
||||||
// url: url: bundle.authData.url + '/api/index.php/zapierapi/getactionschoices/thirparty`,
|
// url: url: bundle.authData.url + '/api/index.php/zapier/getactionschoices/thirparty`,
|
||||||
// };
|
// };
|
||||||
|
|
||||||
// return z.request(options).then((response) => JSON.parse(response.content));
|
// return z.request(options).then((response) => JSON.parse(response.content));
|
||||||
|
|||||||
@ -10,7 +10,7 @@ const subscribeHook = (z, bundle) => {
|
|||||||
action: bundle.inputData.action
|
action: bundle.inputData.action
|
||||||
};
|
};
|
||||||
|
|
||||||
const url = bundle.authData.url + '/api/index.php/zapierapi/hook';
|
const url = bundle.authData.url + '/api/index.php/zapier/hook';
|
||||||
|
|
||||||
// You can build requests and our client will helpfully inject all the variables
|
// You can build requests and our client will helpfully inject all the variables
|
||||||
// you need to complete. You can also register middleware to control this.
|
// you need to complete. You can also register middleware to control this.
|
||||||
@ -32,7 +32,7 @@ const unsubscribeHook = (z, bundle) => {
|
|||||||
// You can build requests and our client will helpfully inject all the variables
|
// You can build requests and our client will helpfully inject all the variables
|
||||||
// you need to complete. You can also register middleware to control this.
|
// you need to complete. You can also register middleware to control this.
|
||||||
const options = {
|
const options = {
|
||||||
url: bundle.authData.url + '/api/index.php/zapierapi/hook/' + bundle.subscribeData.id,
|
url: bundle.authData.url + '/api/index.php/zapier/hook/' + bundle.subscribeData.id,
|
||||||
method: 'DELETE',
|
method: 'DELETE',
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ const getFallbackRealMember = (z, bundle) => {
|
|||||||
// const getModulesChoices = (z/*, bundle*/) => {
|
// const getModulesChoices = (z/*, bundle*/) => {
|
||||||
// // For the test poll, you should get some real data, to aid the setup process.
|
// // For the test poll, you should get some real data, to aid the setup process.
|
||||||
// const options = {
|
// const options = {
|
||||||
// url: bundle.authData.url + '/api/index.php/zapierapi/getmoduleschoices',
|
// url: bundle.authData.url + '/api/index.php/zapier/getmoduleschoices',
|
||||||
// };
|
// };
|
||||||
|
|
||||||
// return z.request(options).then((response) => JSON.parse(response.content));
|
// return z.request(options).then((response) => JSON.parse(response.content));
|
||||||
@ -94,7 +94,7 @@ const getFallbackRealMember = (z, bundle) => {
|
|||||||
// // For the test poll, you should get some real data, to aid the setup process.
|
// // For the test poll, you should get some real data, to aid the setup process.
|
||||||
// const module = bundle.inputData.module;
|
// const module = bundle.inputData.module;
|
||||||
// const options = {
|
// const options = {
|
||||||
// url: url: bundle.authData.url + '/api/index.php/zapierapi/getactionschoices/thirparty`,
|
// url: url: bundle.authData.url + '/api/index.php/zapier/getactionschoices/thirparty`,
|
||||||
// };
|
// };
|
||||||
|
|
||||||
// return z.request(options).then((response) => JSON.parse(response.content));
|
// return z.request(options).then((response) => JSON.parse(response.content));
|
||||||
|
|||||||
@ -10,7 +10,7 @@ const subscribeHook = (z, bundle) => {
|
|||||||
action: bundle.inputData.action
|
action: bundle.inputData.action
|
||||||
};
|
};
|
||||||
|
|
||||||
const url = bundle.authData.url + '/api/index.php/zapierapi/hook';
|
const url = bundle.authData.url + '/api/index.php/zapier/hook';
|
||||||
|
|
||||||
// You can build requests and our client will helpfully inject all the variables
|
// You can build requests and our client will helpfully inject all the variables
|
||||||
// you need to complete. You can also register middleware to control this.
|
// you need to complete. You can also register middleware to control this.
|
||||||
@ -32,7 +32,7 @@ const unsubscribeHook = (z, bundle) => {
|
|||||||
// You can build requests and our client will helpfully inject all the variables
|
// You can build requests and our client will helpfully inject all the variables
|
||||||
// you need to complete. You can also register middleware to control this.
|
// you need to complete. You can also register middleware to control this.
|
||||||
const options = {
|
const options = {
|
||||||
url: bundle.authData.url + '/api/index.php/zapierapi/hook/' + bundle.subscribeData.id,
|
url: bundle.authData.url + '/api/index.php/zapier/hook/' + bundle.subscribeData.id,
|
||||||
method: 'DELETE',
|
method: 'DELETE',
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -74,7 +74,7 @@ const getFallbackRealOrder = (z, bundle) => {
|
|||||||
// // For the test poll, you should get some real data, to aid the setup process.
|
// // For the test poll, you should get some real data, to aid the setup process.
|
||||||
// const module = bundle.inputData.module;
|
// const module = bundle.inputData.module;
|
||||||
// const options = {
|
// const options = {
|
||||||
// url: bundle.authData.url + '/api/index.php/zapierapi/getactionschoices/orders',
|
// url: bundle.authData.url + '/api/index.php/zapier/getactionschoices/orders',
|
||||||
// };
|
// };
|
||||||
|
|
||||||
// return z.request(options).then((response) => JSON.parse(response.content));
|
// return z.request(options).then((response) => JSON.parse(response.content));
|
||||||
|
|||||||
@ -10,7 +10,7 @@ const subscribeHook = (z, bundle) => {
|
|||||||
action: bundle.inputData.action
|
action: bundle.inputData.action
|
||||||
};
|
};
|
||||||
|
|
||||||
const url = bundle.authData.url + '/api/index.php/zapierapi/hook';
|
const url = bundle.authData.url + '/api/index.php/zapier/hook';
|
||||||
|
|
||||||
// You can build requests and our client will helpfully inject all the variables
|
// You can build requests and our client will helpfully inject all the variables
|
||||||
// you need to complete. You can also register middleware to control this.
|
// you need to complete. You can also register middleware to control this.
|
||||||
@ -32,7 +32,7 @@ const unsubscribeHook = (z, bundle) => {
|
|||||||
// You can build requests and our client will helpfully inject all the variables
|
// You can build requests and our client will helpfully inject all the variables
|
||||||
// you need to complete. You can also register middleware to control this.
|
// you need to complete. You can also register middleware to control this.
|
||||||
const options = {
|
const options = {
|
||||||
url: bundle.authData.url + '/api/index.php/zapierapi/hook/' + bundle.subscribeData.id,
|
url: bundle.authData.url + '/api/index.php/zapier/hook/' + bundle.subscribeData.id,
|
||||||
method: 'DELETE',
|
method: 'DELETE',
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ const getFallbackRealThirdparty = (z, bundle) => {
|
|||||||
// const getModulesChoices = (z/*, bundle*/) => {
|
// const getModulesChoices = (z/*, bundle*/) => {
|
||||||
// // For the test poll, you should get some real data, to aid the setup process.
|
// // For the test poll, you should get some real data, to aid the setup process.
|
||||||
// const options = {
|
// const options = {
|
||||||
// url: bundle.authData.url + '/api/index.php/zapierapi/getmoduleschoices',
|
// url: bundle.authData.url + '/api/index.php/zapier/getmoduleschoices',
|
||||||
// };
|
// };
|
||||||
|
|
||||||
// return z.request(options).then((response) => JSON.parse(response.content));
|
// return z.request(options).then((response) => JSON.parse(response.content));
|
||||||
@ -102,7 +102,7 @@ const getFallbackRealThirdparty = (z, bundle) => {
|
|||||||
// // For the test poll, you should get some real data, to aid the setup process.
|
// // For the test poll, you should get some real data, to aid the setup process.
|
||||||
// const module = bundle.inputData.module;
|
// const module = bundle.inputData.module;
|
||||||
// const options = {
|
// const options = {
|
||||||
// url: url: bundle.authData.url + '/api/index.php/zapierapi/getactionschoices/thirparty`,
|
// url: url: bundle.authData.url + '/api/index.php/zapier/getactionschoices/thirparty`,
|
||||||
// };
|
// };
|
||||||
|
|
||||||
// return z.request(options).then((response) => JSON.parse(response.content));
|
// return z.request(options).then((response) => JSON.parse(response.content));
|
||||||
|
|||||||
@ -10,7 +10,7 @@ const subscribeHook = (z, bundle) => {
|
|||||||
action: bundle.inputData.action
|
action: bundle.inputData.action
|
||||||
};
|
};
|
||||||
|
|
||||||
const url = bundle.authData.url + '/api/index.php/zapierapi/hook';
|
const url = bundle.authData.url + '/api/index.php/zapier/hook';
|
||||||
|
|
||||||
// You can build requests and our client will helpfully inject all the variables
|
// You can build requests and our client will helpfully inject all the variables
|
||||||
// you need to complete. You can also register middleware to control this.
|
// you need to complete. You can also register middleware to control this.
|
||||||
@ -32,7 +32,7 @@ const unsubscribeHook = (z, bundle) => {
|
|||||||
// You can build requests and our client will helpfully inject all the variables
|
// You can build requests and our client will helpfully inject all the variables
|
||||||
// you need to complete. You can also register middleware to control this.
|
// you need to complete. You can also register middleware to control this.
|
||||||
const options = {
|
const options = {
|
||||||
url: bundle.authData.url + '/api/index.php/zapierapi/hook/' + bundle.subscribeData.id,
|
url: bundle.authData.url + '/api/index.php/zapier/hook/' + bundle.subscribeData.id,
|
||||||
method: 'DELETE',
|
method: 'DELETE',
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ const getFallbackRealTicket = (z, bundle) => {
|
|||||||
// const getModulesChoices = (z/*, bundle*/) => {
|
// const getModulesChoices = (z/*, bundle*/) => {
|
||||||
// // For the test poll, you should get some real data, to aid the setup process.
|
// // For the test poll, you should get some real data, to aid the setup process.
|
||||||
// const options = {
|
// const options = {
|
||||||
// url: bundle.authData.url + '/api/index.php/zapierapi/getmoduleschoices',
|
// url: bundle.authData.url + '/api/index.php/zapier/getmoduleschoices',
|
||||||
// };
|
// };
|
||||||
|
|
||||||
// return z.request(options).then((response) => JSON.parse(response.content));
|
// return z.request(options).then((response) => JSON.parse(response.content));
|
||||||
@ -97,7 +97,7 @@ const getFallbackRealTicket = (z, bundle) => {
|
|||||||
// // For the test poll, you should get some real data, to aid the setup process.
|
// // For the test poll, you should get some real data, to aid the setup process.
|
||||||
// const module = bundle.inputData.module;
|
// const module = bundle.inputData.module;
|
||||||
// const options = {
|
// const options = {
|
||||||
// url: url: bundle.authData.url + '/api/index.php/zapierapi/getactionschoices/thirparty`,
|
// url: url: bundle.authData.url + '/api/index.php/zapier/getactionschoices/thirparty`,
|
||||||
// };
|
// };
|
||||||
|
|
||||||
// return z.request(options).then((response) => JSON.parse(response.content));
|
// return z.request(options).then((response) => JSON.parse(response.content));
|
||||||
|
|||||||
@ -10,7 +10,7 @@ const subscribeHook = (z, bundle) => {
|
|||||||
action: bundle.inputData.action
|
action: bundle.inputData.action
|
||||||
};
|
};
|
||||||
|
|
||||||
const url = bundle.authData.url + '/api/index.php/zapierapi/hook';
|
const url = bundle.authData.url + '/api/index.php/zapier/hook';
|
||||||
|
|
||||||
// You can build requests and our client will helpfully inject all the variables
|
// You can build requests and our client will helpfully inject all the variables
|
||||||
// you need to complete. You can also register middleware to control this.
|
// you need to complete. You can also register middleware to control this.
|
||||||
@ -32,7 +32,7 @@ const unsubscribeHook = (z, bundle) => {
|
|||||||
// You can build requests and our client will helpfully inject all the variables
|
// You can build requests and our client will helpfully inject all the variables
|
||||||
// you need to complete. You can also register middleware to control this.
|
// you need to complete. You can also register middleware to control this.
|
||||||
const options = {
|
const options = {
|
||||||
url: bundle.authData.url + '/api/index.php/zapierapi/hook/' + bundle.subscribeData.id,
|
url: bundle.authData.url + '/api/index.php/zapier/hook/' + bundle.subscribeData.id,
|
||||||
method: 'DELETE',
|
method: 'DELETE',
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -73,7 +73,7 @@ const getFallbackRealUser = (z, bundle) => {
|
|||||||
// const getModulesChoices = (z/*, bundle*/) => {
|
// const getModulesChoices = (z/*, bundle*/) => {
|
||||||
// // For the test poll, you should get some real data, to aid the setup process.
|
// // For the test poll, you should get some real data, to aid the setup process.
|
||||||
// const options = {
|
// const options = {
|
||||||
// url: bundle.authData.url + '/api/index.php/zapierapi/getmoduleschoices',
|
// url: bundle.authData.url + '/api/index.php/zapier/getmoduleschoices',
|
||||||
// };
|
// };
|
||||||
|
|
||||||
// return z.request(options).then((response) => JSON.parse(response.content));
|
// return z.request(options).then((response) => JSON.parse(response.content));
|
||||||
@ -93,7 +93,7 @@ const getFallbackRealUser = (z, bundle) => {
|
|||||||
// // For the test poll, you should get some real data, to aid the setup process.
|
// // For the test poll, you should get some real data, to aid the setup process.
|
||||||
// const module = bundle.inputData.module;
|
// const module = bundle.inputData.module;
|
||||||
// const options = {
|
// const options = {
|
||||||
// url: url: bundle.authData.url + '/api/index.php/zapierapi/getactionschoices/thirparty`,
|
// url: url: bundle.authData.url + '/api/index.php/zapier/getactionschoices/thirparty`,
|
||||||
// };
|
// };
|
||||||
|
|
||||||
// return z.request(options).then((response) => JSON.parse(response.content));
|
// return z.request(options).then((response) => JSON.parse(response.content));
|
||||||
|
|||||||
@ -152,7 +152,7 @@ $user->rights->propal->creer=1;
|
|||||||
$user->rights->propal->propal_advance->validate=1;
|
$user->rights->propal->propal_advance->validate=1;
|
||||||
|
|
||||||
|
|
||||||
if (! empty($conf->global->PROPALE_ADDON) && is_readable(DOL_DOCUMENT_ROOT ."/core/modules/propale/".$conf->global->PROPALE_ADDON.".php")) {
|
if (!empty($conf->global->PROPALE_ADDON) && is_readable(DOL_DOCUMENT_ROOT ."/core/modules/propale/".$conf->global->PROPALE_ADDON.".php")) {
|
||||||
require_once DOL_DOCUMENT_ROOT ."/core/modules/propale/".$conf->global->PROPALE_ADDON.".php";
|
require_once DOL_DOCUMENT_ROOT ."/core/modules/propale/".$conf->global->PROPALE_ADDON.".php";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -218,7 +218,7 @@ if ($date == 'all') {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Replace database handler
|
// Replace database handler
|
||||||
if (! empty($argv[4])) {
|
if (!empty($argv[4])) {
|
||||||
$db->close();
|
$db->close();
|
||||||
unset($db);
|
unset($db);
|
||||||
$db=getDoliDBInstance($argv[4], $argv[5], $argv[6], $argv[7], $argv[8], $argv[9]);
|
$db=getDoliDBInstance($argv[4], $argv[5], $argv[6], $argv[7], $argv[8], $argv[9]);
|
||||||
|
|||||||
@ -12,3 +12,11 @@ Le client règle rapidement et on lui accorde un escompte de 3% (120 € * 3% =
|
|||||||
411xxx 3,60 € TTC
|
411xxx 3,60 € TTC
|
||||||
|
|
||||||
Et ça marche à l’inverse avec un fournisseur sauf que l’on est en 775000 au lieu de 665000 pour escompte obtenus.
|
Et ça marche à l’inverse avec un fournisseur sauf que l’on est en 775000 au lieu de 665000 pour escompte obtenus.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Un compte comptable de Tiers vente = Acount Receivable
|
||||||
|
Un compte comptable de Tiers achat = Acount Payable
|
||||||
|
|
||||||
|
|
||||||
@ -15,9 +15,10 @@
|
|||||||
<exclude-pattern type="relative">htdocs/install/doctemplates/websites</exclude-pattern>
|
<exclude-pattern type="relative">htdocs/install/doctemplates/websites</exclude-pattern>
|
||||||
<exclude-pattern type="relative">htdocs/conf.php</exclude-pattern>
|
<exclude-pattern type="relative">htdocs/conf.php</exclude-pattern>
|
||||||
<exclude-pattern type="relative">*/nltechno*</exclude-pattern>
|
<exclude-pattern type="relative">*/nltechno*</exclude-pattern>
|
||||||
<exclude-pattern type="relative">*/htdocs/includes</exclude-pattern>
|
|
||||||
<exclude-pattern type="relative">source</exclude-pattern>
|
<exclude-pattern type="relative">source</exclude-pattern>
|
||||||
<exclude-pattern type="relative">.git</exclude-pattern>
|
<exclude-pattern type="relative">.git</exclude-pattern>
|
||||||
|
<exclude-pattern>htdocs/includes</exclude-pattern>
|
||||||
|
<exclude-pattern>htdocs/install/doctemplates/websites</exclude-pattern>
|
||||||
|
|
||||||
<!-- List of all tests -->
|
<!-- List of all tests -->
|
||||||
|
|
||||||
@ -135,7 +136,7 @@
|
|||||||
<rule ref="Generic.Metrics.CyclomaticComplexity">
|
<rule ref="Generic.Metrics.CyclomaticComplexity">
|
||||||
<properties>
|
<properties>
|
||||||
<property name="complexity" value="250" />
|
<property name="complexity" value="250" />
|
||||||
<property name="absoluteComplexity" value="300" />
|
<property name="absoluteComplexity" value="400" />
|
||||||
</properties>
|
</properties>
|
||||||
</rule>
|
</rule>
|
||||||
<rule ref="Generic.Metrics.NestingLevel">
|
<rule ref="Generic.Metrics.NestingLevel">
|
||||||
|
|||||||
19
dev/setup/fail2ban/filter.d/web-dolibarr-limitpublic.conf
Normal file
19
dev/setup/fail2ban/filter.d/web-dolibarr-limitpublic.conf
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# Fail2Ban configuration file
|
||||||
|
#
|
||||||
|
# Regexp to detect access on public pages so we can add mitigation on IP making too much
|
||||||
|
# access to your a Dolibarr instance.
|
||||||
|
|
||||||
|
|
||||||
|
[Definition]
|
||||||
|
|
||||||
|
# To test, you can inject this example into log
|
||||||
|
# echo `date +'%Y-%m-%d %H:%M:%S'`" INFO 1.2.3.4 --- Access to GET /public/clicktodial/cidlookup.php" >> /mypath/documents/dolibarr.log
|
||||||
|
#
|
||||||
|
# then
|
||||||
|
# fail2ban-client status web-dolibarr-limitpublic
|
||||||
|
#
|
||||||
|
# To test rule file on a existing log file
|
||||||
|
# fail2ban-regex /mypath/documents/dolibarr.log /etc/fail2ban/filter.d/web-dolibarr-limitpublic.conf
|
||||||
|
|
||||||
|
failregex = ^ [A-Z\s]+ <HOST>\s+--- Access to .*/public/
|
||||||
|
ignoreregex =
|
||||||
@ -1,8 +1,7 @@
|
|||||||
# Fail2Ban configuration file
|
# Fail2Ban configuration file
|
||||||
#
|
#
|
||||||
# Regexp to catch known spambots and software alike. Please verify
|
# Regexp to detect try to check a couple login/password so we can add mitigation
|
||||||
# that it is your intent to block IPs which were driven by
|
# on IP making too much tries.
|
||||||
# above mentioned bots.
|
|
||||||
|
|
||||||
|
|
||||||
[Definition]
|
[Definition]
|
||||||
@ -11,7 +10,7 @@
|
|||||||
# echo `date +'%Y-%m-%d %H:%M:%S'`" INFO 1.2.3.4 functions_dolibarr::check_user_password_abcd Authentication KO" >> /mypath/documents/dolibarr.log
|
# echo `date +'%Y-%m-%d %H:%M:%S'`" INFO 1.2.3.4 functions_dolibarr::check_user_password_abcd Authentication KO" >> /mypath/documents/dolibarr.log
|
||||||
#
|
#
|
||||||
# then
|
# then
|
||||||
# fail2ban-client status web-dol-bruteforce
|
# fail2ban-client status web-dolibarr-rulesbruteforce
|
||||||
#
|
#
|
||||||
# To test rule file on a existing log file
|
# To test rule file on a existing log file
|
||||||
# fail2ban-regex /mypath/documents/dolibarr.log /etc/fail2ban/filter.d/web-dolibarr-rulesbruteforce.conf
|
# fail2ban-regex /mypath/documents/dolibarr.log /etc/fail2ban/filter.d/web-dolibarr-rulesbruteforce.conf
|
||||||
|
|||||||
@ -1,8 +1,7 @@
|
|||||||
# Fail2Ban configuration file
|
# Fail2Ban configuration file
|
||||||
#
|
#
|
||||||
# Regexp to catch known spambots and software alike. Please verify
|
# Regexp to detect access on passwordforgotten.php page so we can add mitigation on IP making too much
|
||||||
# that it is your intent to block IPs which were driven by
|
# access to this Dolibarr page.
|
||||||
# above mentioned bots.
|
|
||||||
|
|
||||||
|
|
||||||
[Definition]
|
[Definition]
|
||||||
@ -11,7 +10,7 @@
|
|||||||
# echo `date +'%Y-%m-%d %H:%M:%S'`" INFO 1.2.3.4 --- Access to GET /passwordforgotten.php - action=buildnewpassword, massaction=" >> /mypath/documents/dolibarr.log
|
# echo `date +'%Y-%m-%d %H:%M:%S'`" INFO 1.2.3.4 --- Access to GET /passwordforgotten.php - action=buildnewpassword, massaction=" >> /mypath/documents/dolibarr.log
|
||||||
#
|
#
|
||||||
# then
|
# then
|
||||||
# fail2ban-client status web-dol-passforgotten
|
# fail2ban-client status web-dolibarr-rulespassforgotten
|
||||||
#
|
#
|
||||||
# To test rule file on a existing log file
|
# To test rule file on a existing log file
|
||||||
# fail2ban-regex /mypath/documents/dolibarr.log /etc/fail2ban/filter.d/web-dolibarr-rulespassforgotten.conf
|
# fail2ban-regex /mypath/documents/dolibarr.log /etc/fail2ban/filter.d/web-dolibarr-rulespassforgotten.conf
|
||||||
|
|||||||
@ -8,21 +8,35 @@
|
|||||||
enabled = true
|
enabled = true
|
||||||
port = http,https
|
port = http,https
|
||||||
filter = web-dolibarr-rulespassforgotten
|
filter = web-dolibarr-rulespassforgotten
|
||||||
logpath = >> /mypath/documents/documents/dolibarr.log
|
logpath = /mypath/documents/documents/dolibarr.log
|
||||||
action = %(action_mw)s
|
action = %(action_mw)s
|
||||||
bantime = 4320000 ; 50 days
|
bantime = 4320000 ; 50 days
|
||||||
findtime = 86400 ; 1 day
|
findtime = 86400 ; 1 day
|
||||||
maxretry = 10
|
maxretry = 10
|
||||||
|
|
||||||
|
|
||||||
[web-dol-bruteforce]
|
[web-dol-bruteforce]
|
||||||
|
|
||||||
; rule against bruteforce hacking (login + api)
|
; rule against bruteforce hacking (login + api)
|
||||||
enabled = true
|
enabled = true
|
||||||
port = http,https
|
port = http,https
|
||||||
filter = web-dolibarr-rulesbruteforce
|
filter = web-dolibarr-rulesbruteforce
|
||||||
logpath = >> /mypath/documents/documents/dolibarr.log
|
logpath = /mypath/documents/documents/dolibarr.log
|
||||||
action = %(action_mw)s
|
action = %(action_mw)s
|
||||||
bantime = 86400 ; 1 day
|
bantime = 86400 ; 1 day
|
||||||
findtime = 3600 ; 1 hour
|
findtime = 3600 ; 1 hour
|
||||||
maxretry = 10
|
maxretry = 10
|
||||||
|
|
||||||
|
|
||||||
|
[web-dol-limitpublic]
|
||||||
|
|
||||||
|
; rule to add rate limit on some public pages
|
||||||
|
enabled = true
|
||||||
|
port = http,https
|
||||||
|
filter = web-dolibarr-limitpublic
|
||||||
|
logpath = /mypath/documents/documents/dolibarr.log
|
||||||
|
action = %(action_mw)s
|
||||||
|
bantime = 86400 ; 1 day
|
||||||
|
findtime = 86400 ; 1 day
|
||||||
|
maxretry = 500
|
||||||
|
|
||||||
|
|||||||
@ -487,7 +487,7 @@ function pg2mysql(&$input, &$arrayofprimaryalreadyintabledef, $header = true)
|
|||||||
$pkey = $line;
|
$pkey = $line;
|
||||||
|
|
||||||
$linenumber ++;
|
$linenumber ++;
|
||||||
if (! empty($lines[$linenumber])) {
|
if (!empty($lines[$linenumber])) {
|
||||||
$line = $lines[$linenumber];
|
$line = $lines[$linenumber];
|
||||||
} else {
|
} else {
|
||||||
$line = '';
|
$line = '';
|
||||||
@ -517,7 +517,7 @@ function pg2mysql(&$input, &$arrayofprimaryalreadyintabledef, $header = true)
|
|||||||
if (substr($line, 0, 12) == "CREATE INDEX") {
|
if (substr($line, 0, 12) == "CREATE INDEX") {
|
||||||
$matches = array();
|
$matches = array();
|
||||||
preg_match('/CREATE INDEX "?([a-zA-Z0-9_]*)"? ON "?([a-zA-Z0-9_\.]*)"? USING btree \((.*)\);/', $line, $matches);
|
preg_match('/CREATE INDEX "?([a-zA-Z0-9_]*)"? ON "?([a-zA-Z0-9_\.]*)"? USING btree \((.*)\);/', $line, $matches);
|
||||||
if (! empty($matches[3])) {
|
if (!empty($matches[3])) {
|
||||||
$indexname = $matches[1];
|
$indexname = $matches[1];
|
||||||
$tablename = str_replace('public.', '', $matches[2]);
|
$tablename = str_replace('public.', '', $matches[2]);
|
||||||
$columns = $matches[3];
|
$columns = $matches[3];
|
||||||
@ -529,7 +529,7 @@ function pg2mysql(&$input, &$arrayofprimaryalreadyintabledef, $header = true)
|
|||||||
if (substr($line, 0, 19) == "CREATE UNIQUE INDEX") {
|
if (substr($line, 0, 19) == "CREATE UNIQUE INDEX") {
|
||||||
$matches = array();
|
$matches = array();
|
||||||
preg_match('/CREATE UNIQUE INDEX "?([a-zA-Z0-9_]*)"? ON "?([a-zA-Z0-9_\.]*)"? USING btree \((.*)\);/', $line, $matches);
|
preg_match('/CREATE UNIQUE INDEX "?([a-zA-Z0-9_]*)"? ON "?([a-zA-Z0-9_\.]*)"? USING btree \((.*)\);/', $line, $matches);
|
||||||
if (! empty($matches[3])) {
|
if (!empty($matches[3])) {
|
||||||
$indexname = $matches[1];
|
$indexname = $matches[1];
|
||||||
$tablename = str_replace('public.', '', $matches[2]);
|
$tablename = str_replace('public.', '', $matches[2]);
|
||||||
$columns = str_replace('"', '', $matches[3]);
|
$columns = str_replace('"', '', $matches[3]);
|
||||||
|
|||||||
@ -24,6 +24,7 @@ fi
|
|||||||
if [ "x$1" = "xfix" ]
|
if [ "x$1" = "xfix" ]
|
||||||
then
|
then
|
||||||
find ./htdocs -type f -iname "*.php" -exec chmod a-x {} \;
|
find ./htdocs -type f -iname "*.php" -exec chmod a-x {} \;
|
||||||
|
find ./htdocs/install/ -type d -exec chmod ug+rw {} \;
|
||||||
chmod a+x ./scripts/*/*.php
|
chmod a+x ./scripts/*/*.php
|
||||||
chmod a+x ./scripts/*/*.sh
|
chmod a+x ./scripts/*/*.sh
|
||||||
chmod g-w ./scripts/*/*.php
|
chmod g-w ./scripts/*/*.php
|
||||||
|
|||||||
@ -1,4 +1,7 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Count number of different contributors and number of commits for a given year.
|
||||||
|
#
|
||||||
|
|
||||||
if [ "x$1" = "x" ]; then
|
if [ "x$1" = "x" ]; then
|
||||||
echo "Usage: $0 YEAR"
|
echo "Usage: $0 YEAR"
|
||||||
|
|||||||
@ -1,6 +1,10 @@
|
|||||||
#/bin/bash
|
#/bin/bash
|
||||||
Releases=("3.8" "3.9" "4.0" "5.0" "6.0" " 7.0" "develop")
|
#
|
||||||
Dates=("2013-01-01", "2014-01-01", "2015-01-01", "2016-07-01", "2017-02-01", "2017-07-01", "2018-02-01", "2050-01-01")
|
# Count number of commits per user and per versions (using date for version detection)
|
||||||
|
#
|
||||||
|
|
||||||
|
Releases=("16.0" "develop")
|
||||||
|
Dates=("2022-01-01" "2022-08-31" "2050-01-01")
|
||||||
let "counter = 1"
|
let "counter = 1"
|
||||||
|
|
||||||
for i in "${Releases[@]}"
|
for i in "${Releases[@]}"
|
||||||
|
|||||||
16
dev/tools/github_lines_perusers.sh
Executable file
16
dev/tools/github_lines_perusers.sh
Executable file
@ -0,0 +1,16 @@
|
|||||||
|
#/bin/bash
|
||||||
|
#
|
||||||
|
# Count number of lines modified per user for a given branch
|
||||||
|
#
|
||||||
|
|
||||||
|
if [ "x$2" = "x" ]; then
|
||||||
|
echo "Usage: $0 tagnamestart|START tagnameend|HEAD"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
echo "git log $1..$2 --shortstat | grep ... | perl ... > /tmp/github_lines_perusers.tmp"
|
||||||
|
git log $1..$2 --shortstat | grep -e 'Author:' -e 'Date:' -e ' changed' -e ' insertion' -e ' deletion' | perl -n -e '/^(.*)$/; $line = $1; if ($line =~ /(changed|insertion|deletion)/) { $line =~ s/[^0-9\s]//g; my @arr=split /\s+/, $line; $tot=0; for (1..@arr) { $tot += $arr[$_]; }; print $tot."\n"; } else { print $line."\n"; };' > /tmp/github_lines_perusers.tmp
|
||||||
|
|
||||||
|
cat /tmp/github_lines_perusers.tmp | awk 'BEGIN { FS="\n"; print "user and nb of lines"; lastuser=""; } { if ($1 ~ /Author:/) { lastuser=$1 }; if ($1 ~ /^[0-9]+$/) { aaa[lastuser]+=$1; } } END { for (var in aaa) print var," ",aaa[var]; } '
|
||||||
|
|
||||||
@ -121,8 +121,10 @@ main()
|
|||||||
|
|
||||||
# Search of all jpg/jpeg/png in $INPUT
|
# Search of all jpg/jpeg/png in $INPUT
|
||||||
# We remove images from $OUTPUT if $OUTPUT is a subdirectory of $INPUT
|
# We remove images from $OUTPUT if $OUTPUT is a subdirectory of $INPUT
|
||||||
echo "Scan $INPUT to find images with find $INPUT -regextype posix-extended -regex '.*\.(jpg|jpeg|png)' | grep -v '/gource/' | grep -v '/includes/' | grep -v '/custom/' | grep -v $OUTPUT"
|
echo "Scan $INPUT to find images with find $INPUT -regextype posix-extended -regex '.*\.(jpg|jpeg|png)' | grep -v '/gource/' | grep -v '/includes/' | grep -v '/custom/' | grep -v '/documents/' | grep -v $OUTPUT"
|
||||||
|
#echo "Scan $INPUT to find images with find $INPUT -regextype posix-extended -regex '.*\.(jpg|jpeg|png)' | grep -v '/gource/' | grep -v '/includes/' | grep -v '/custom/'"
|
||||||
IMAGES=$(find $INPUT -regextype posix-extended -regex '.*\.(jpg|jpeg|png)' | grep -v '/gource/' | grep -v '/includes/' | grep -v '/custom/' | grep -v '/documents/' | grep -v $OUTPUT)
|
IMAGES=$(find $INPUT -regextype posix-extended -regex '.*\.(jpg|jpeg|png)' | grep -v '/gource/' | grep -v '/includes/' | grep -v '/custom/' | grep -v '/documents/' | grep -v $OUTPUT)
|
||||||
|
#IMAGES=$(find $INPUT -regextype posix-extended -regex '.*\.(jpg|jpeg|png)' | grep -v '/gource/' | grep -v '/includes/' | grep -v '/custom/')
|
||||||
|
|
||||||
if [ "$QUIET" == "0" ]; then
|
if [ "$QUIET" == "0" ]; then
|
||||||
echo --- Optimizing $INPUT ---
|
echo --- Optimizing $INPUT ---
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/*spl_autoload_register(function ($class_name) {
|
/*spl_autoload_register(function ($class_name) {
|
||||||
//var_dump('class='.$class_name);
|
//var_dump('class='.$class_name);
|
||||||
require $class_name;
|
require $class_name;
|
||||||
|
|||||||
@ -309,11 +309,11 @@ class autoTranslator
|
|||||||
{
|
{
|
||||||
// We want to be sure that src_lang and dest_lang are using 2 chars only
|
// We want to be sure that src_lang and dest_lang are using 2 chars only
|
||||||
$tmp=explode('_', $src_lang);
|
$tmp=explode('_', $src_lang);
|
||||||
if (! empty($tmp[1]) && $tmp[0] == $tmp[1]) {
|
if (!empty($tmp[1]) && $tmp[0] == $tmp[1]) {
|
||||||
$src_lang=$tmp[0];
|
$src_lang=$tmp[0];
|
||||||
}
|
}
|
||||||
$tmp=explode('_', $dest_lang);
|
$tmp=explode('_', $dest_lang);
|
||||||
if (! empty($tmp[1]) && $tmp[0] == $tmp[1]) {
|
if (!empty($tmp[1]) && $tmp[0] == $tmp[1]) {
|
||||||
$dest_lang=$tmp[0];
|
$dest_lang=$tmp[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -349,7 +349,7 @@ class autoTranslator
|
|||||||
// now, process the JSON string
|
// now, process the JSON string
|
||||||
$json = json_decode($body, true);
|
$json = json_decode($body, true);
|
||||||
|
|
||||||
if ((! empty($json['responseStatus']) && $json['responseStatus'] != 200)
|
if ((!empty($json['responseStatus']) && $json['responseStatus'] != 200)
|
||||||
|| count($json['data']['translations']) == 0) {
|
|| count($json['data']['translations']) == 0) {
|
||||||
print "Error: ".$json['responseStatus']." ".$url."\n";
|
print "Error: ".$json['responseStatus']." ".$url."\n";
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@ -221,7 +221,7 @@ foreach ($dups as $string => $pages) {
|
|||||||
// Loop on each line keword was found into file.
|
// Loop on each line keword was found into file.
|
||||||
$listoffilesforthisentry=array();
|
$listoffilesforthisentry=array();
|
||||||
foreach ($lines as $line => $translatedvalue) {
|
foreach ($lines as $line => $translatedvalue) {
|
||||||
if (! empty($listoffilesforthisentry[$file])) {
|
if (!empty($listoffilesforthisentry[$file])) {
|
||||||
$duplicateinsamefile=1;
|
$duplicateinsamefile=1;
|
||||||
}
|
}
|
||||||
$listoffilesforthisentry[$file]=1;
|
$listoffilesforthisentry[$file]=1;
|
||||||
@ -300,7 +300,7 @@ if ($web) {
|
|||||||
|
|
||||||
// STEP 2 - Search key not used
|
// STEP 2 - Search key not used
|
||||||
|
|
||||||
if ((! empty($_REQUEST['unused']) && $_REQUEST['unused'] == 'true') || (isset($argv[1]) && $argv[1]=='unused=true')) {
|
if ((!empty($_REQUEST['unused']) && $_REQUEST['unused'] == 'true') || (isset($argv[1]) && $argv[1]=='unused=true')) {
|
||||||
print "***** Strings in en_US that are never used:\n";
|
print "***** Strings in en_US that are never used:\n";
|
||||||
|
|
||||||
$unused=array();
|
$unused=array();
|
||||||
|
|||||||
@ -303,8 +303,8 @@ foreach ($filesToProcess as $fileToProcess) {
|
|||||||
|
|
||||||
// String exists in both files and value into alternative language differs from main language but also from english files
|
// String exists in both files and value into alternative language differs from main language but also from english files
|
||||||
// so we keep it.
|
// so we keep it.
|
||||||
if ((! empty($aSecondary[$key]) && $aSecondary[$key] != $aPrimary[$key]
|
if ((!empty($aSecondary[$key]) && $aSecondary[$key] != $aPrimary[$key]
|
||||||
&& ! empty($aEnglish[$key]) && $aSecondary[$key] != $aEnglish[$key])
|
&& !empty($aEnglish[$key]) && $aSecondary[$key] != $aEnglish[$key])
|
||||||
|| in_array($key, $arrayofkeytoalwayskeep) || preg_match('/^FormatDate/', $key) || preg_match('/^FormatHour/', $key)
|
|| in_array($key, $arrayofkeytoalwayskeep) || preg_match('/^FormatDate/', $key) || preg_match('/^FormatHour/', $key)
|
||||||
) {
|
) {
|
||||||
//print "Key $key differs (aSecondary=".$aSecondary[$key].", aPrimary=".$aPrimary[$key].", aEnglish=".$aEnglish[$key].") so we add it into new secondary language (line: $cnt).\n";
|
//print "Key $key differs (aSecondary=".$aSecondary[$key].", aPrimary=".$aPrimary[$key].", aEnglish=".$aEnglish[$key].") so we add it into new secondary language (line: $cnt).\n";
|
||||||
|
|||||||
@ -23,6 +23,7 @@
|
|||||||
* \brief List accounting account
|
* \brief List accounting account
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
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/accounting.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
||||||
@ -30,7 +31,7 @@ require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingaccount.class.php';
|
|||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formaccounting.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formaccounting.class.php';
|
||||||
|
|
||||||
// Load translation files required by the page
|
// Load translation files required by the page
|
||||||
$langs->loadLangs(array("compta", "bills", "admin", "accountancy", "salaries"));
|
$langs->loadLangs(array('accountancy', 'admin', 'bills', 'compta', 'salaries'));
|
||||||
|
|
||||||
$mesg = '';
|
$mesg = '';
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
@ -59,7 +60,7 @@ $permissiontodelete = $user->hasRight('accounting', 'chartofaccount');
|
|||||||
if ($user->socid > 0) {
|
if ($user->socid > 0) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
if (empty($user->rights->accounting->chartofaccount)) {
|
if (!$user->hasRight('accounting', 'chartofaccount')) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,6 +98,9 @@ if ($conf->global->MAIN_FEATURES_LEVEL < 2) {
|
|||||||
|
|
||||||
$accounting = new AccountingAccount($db);
|
$accounting = new AccountingAccount($db);
|
||||||
|
|
||||||
|
// Initialize technical object to manage hooks. Note that conf->hooks_modules contains array
|
||||||
|
$hookmanager->initHooks(array('accountancyadminaccount'));
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Actions
|
* Actions
|
||||||
@ -109,8 +113,8 @@ if (!GETPOST('confirmmassaction', 'alpha')) {
|
|||||||
$massaction = '';
|
$massaction = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
$parameters = array();
|
$parameters = array('chartofaccounts' => $chartofaccounts, 'permissiontoadd' => $permissiontoadd, 'permissiontodelete' => $permissiontodelete);
|
||||||
$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been monowraponalldified by some hooks
|
$reshook = $hookmanager->executeHooks('doActions', $parameters, $accounting, $action); // Note that $action and $object may have been monowraponalldified by some hooks
|
||||||
if ($reshook < 0) {
|
if ($reshook < 0) {
|
||||||
setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
||||||
}
|
}
|
||||||
@ -398,6 +402,11 @@ if ($resql) {
|
|||||||
print '<input type="'.(empty($conf->use_javascript_ajax) ? 'submit' : 'button').'" class="button button-edit" name="change_chart" id="change_chart" value="'.dol_escape_htmltag($langs->trans("ChangeAndLoad")).'">';
|
print '<input type="'.(empty($conf->use_javascript_ajax) ? 'submit' : 'button').'" class="button button-edit" name="change_chart" id="change_chart" value="'.dol_escape_htmltag($langs->trans("ChangeAndLoad")).'">';
|
||||||
|
|
||||||
print '<br>';
|
print '<br>';
|
||||||
|
|
||||||
|
$parameters = array('chartofaccounts' => $chartofaccounts, 'permissiontoadd' => $permissiontoadd, 'permissiontodelete' => $permissiontodelete);
|
||||||
|
$reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $accounting, $action); // Note that $action and $object may have been modified by hook
|
||||||
|
print $hookmanager->resPrint;
|
||||||
|
|
||||||
print '<br>';
|
print '<br>';
|
||||||
|
|
||||||
$varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage;
|
$varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage;
|
||||||
|
|||||||
@ -32,6 +32,7 @@
|
|||||||
* \brief Page to administer model of chart of accounts
|
* \brief Page to administer model of chart of accounts
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
|
||||||
@ -44,7 +45,7 @@ if (isModEnabled('accounting')) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Load translation files required by the page
|
// Load translation files required by the page
|
||||||
$langs->loadLangs(array("errors", "admin", "companies", "resource", "holiday", "compta", "accountancy", "hrm"));
|
$langs->loadLangs(array('accountancy', 'admin', 'companies', 'compta', 'errors', 'holiday', 'hrm', 'resource'));
|
||||||
|
|
||||||
$action = GETPOST('action', 'aZ09') ?GETPOST('action', 'aZ09') : 'view';
|
$action = GETPOST('action', 'aZ09') ?GETPOST('action', 'aZ09') : 'view';
|
||||||
$confirm = GETPOST('confirm', 'alpha');
|
$confirm = GETPOST('confirm', 'alpha');
|
||||||
@ -78,7 +79,7 @@ $search_country_id = GETPOST('search_country_id', 'int');
|
|||||||
if ($user->socid > 0) {
|
if ($user->socid > 0) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
if (empty($user->rights->accounting->chartofaccount)) {
|
if (!$user->hasRight('accounting', 'chartofaccount')) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -23,6 +23,7 @@
|
|||||||
* \brief Card of accounting account
|
* \brief Card of accounting account
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingaccount.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingaccount.class.php';
|
||||||
@ -32,7 +33,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formaccounting.class.php';
|
|||||||
$error = 0;
|
$error = 0;
|
||||||
|
|
||||||
// Load translation files required by the page
|
// Load translation files required by the page
|
||||||
$langs->loadLangs(array("bills", "accountancy", "compta"));
|
$langs->loadLangs(array('accountancy', 'bills', 'compta'));
|
||||||
|
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$backtopage = GETPOST('backtopage', 'alpha');
|
$backtopage = GETPOST('backtopage', 'alpha');
|
||||||
@ -48,7 +49,7 @@ $label = GETPOST('label', 'alpha');
|
|||||||
if ($user->socid > 0) {
|
if ($user->socid > 0) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
if (empty($user->rights->accounting->chartofaccount)) {
|
if (!$user->hasRight('accounting', 'chartofaccount')) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,7 +85,7 @@ if ($action == 'add' && $user->hasRight('accounting', 'chartofaccount')) {
|
|||||||
// Clean code
|
// Clean code
|
||||||
|
|
||||||
// To manage zero or not at the end of the accounting account
|
// To manage zero or not at the end of the accounting account
|
||||||
if ($conf->global->ACCOUNTING_MANAGE_ZERO == 1) {
|
if (!empty($conf->global->ACCOUNTING_MANAGE_ZERO)) {
|
||||||
$account_number = $account_number;
|
$account_number = $account_number;
|
||||||
} else {
|
} else {
|
||||||
$account_number = clean_account($account_number);
|
$account_number = clean_account($account_number);
|
||||||
@ -147,7 +148,7 @@ if ($action == 'add' && $user->hasRight('accounting', 'chartofaccount')) {
|
|||||||
// Clean code
|
// Clean code
|
||||||
|
|
||||||
// To manage zero or not at the end of the accounting account
|
// To manage zero or not at the end of the accounting account
|
||||||
if (isset($conf->global->ACCOUNTING_MANAGE_ZERO) && $conf->global->ACCOUNTING_MANAGE_ZERO == 1) {
|
if (!empty($conf->global->ACCOUNTING_MANAGE_ZERO)) {
|
||||||
$account_number = $account_number;
|
$account_number = $account_number;
|
||||||
} else {
|
} else {
|
||||||
$account_number = clean_account($account_number);
|
$account_number = clean_account($account_number);
|
||||||
@ -425,11 +426,9 @@ if ($action == 'create') {
|
|||||||
print '<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans("NotAllowed")).'">'.$langs->trans('Modify').'</a>';
|
print '<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans("NotAllowed")).'">'.$langs->trans('Modify').'</a>';
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($user->hasRight('accounting', 'chartofaccount')) {
|
// Delete
|
||||||
print '<a class="butActionDelete" href="'.$_SERVER["PHP_SELF"].'?action=delete&token='.newToken().'&id='.$object->id.'">'.$langs->trans('Delete').'</a>';
|
$permissiontodelete = $user->hasRight('accounting', 'chartofaccount');
|
||||||
} else {
|
print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', $permissiontodelete);
|
||||||
print '<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans("NotAllowed")).'">'.$langs->trans('Delete').'</a>';
|
|
||||||
}
|
|
||||||
|
|
||||||
print '</div>';
|
print '</div>';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/* Copyright (C) 2016 Jamal Elbaz <jamelbaz@gmail.pro>
|
/* Copyright (C) 2016 Jamal Elbaz <jamelbaz@gmail.pro>
|
||||||
* Copyright (C) 2017 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
* Copyright (C) 2017-2022 Alexandre Spangaro <aspangaro@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
|
||||||
@ -22,6 +22,7 @@
|
|||||||
* \brief Page to assign mass categories to accounts
|
* \brief Page to assign mass categories to accounts
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountancycategory.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountancycategory.class.php';
|
||||||
@ -44,7 +45,7 @@ if ($cat_id == 0) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Security check
|
// Security check
|
||||||
if (empty($user->rights->accounting->chartofaccount)) {
|
if (!$user->hasRight('accounting', 'chartofaccount')) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -124,7 +125,8 @@ if (!empty($cat_id)) {
|
|||||||
|
|
||||||
$arraykeyvalue = array();
|
$arraykeyvalue = array();
|
||||||
foreach ($accountingcategory->lines_cptbk as $key => $val) {
|
foreach ($accountingcategory->lines_cptbk as $key => $val) {
|
||||||
$arraykeyvalue[length_accountg($val->numero_compte)] = length_accountg($val->numero_compte).' ('.$val->label_compte.($val->doc_ref ? ' '.$val->doc_ref : '').')';
|
$doc_ref = !empty($val->doc_ref) ? $val->doc_ref : '';
|
||||||
|
$arraykeyvalue[length_accountg($val->numero_compte)] = length_accountg($val->numero_compte) . ' - ' . $val->label_compte . ($doc_ref ? ' '.$doc_ref : '');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_array($accountingcategory->lines_cptbk) && count($accountingcategory->lines_cptbk) > 0) {
|
if (is_array($accountingcategory->lines_cptbk) && count($accountingcategory->lines_cptbk) > 0) {
|
||||||
|
|||||||
@ -22,6 +22,7 @@
|
|||||||
* \brief Page to administer data tables
|
* \brief Page to administer data tables
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
|
||||||
@ -42,7 +43,7 @@ $rowid = GETPOST('rowid', 'alpha');
|
|||||||
$code = GETPOST('code', 'alpha');
|
$code = GETPOST('code', 'alpha');
|
||||||
|
|
||||||
// Security access
|
// Security access
|
||||||
if (empty($user->rights->accounting->chartofaccount)) {
|
if (!$user->hasRight('accounting', 'chartofaccount')) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -885,9 +886,11 @@ function fieldListAccountingCategories($fieldlist, $obj = '', $tabname = '', $co
|
|||||||
$fieldname = 'country';
|
$fieldname = 'country';
|
||||||
if ($context == 'add') {
|
if ($context == 'add') {
|
||||||
$fieldname = 'country_id';
|
$fieldname = 'country_id';
|
||||||
print $form->select_country(GETPOST('country_id', 'int'), $fieldname, '', 28, 'maxwidth200 maxwidthonsmartphone');
|
$preselectcountrycode = GETPOSTISSET('country_id') ? GETPOST('country_id', 'int') : $mysoc->country_code;
|
||||||
|
print $form->select_country($preselectcountrycode, $fieldname, '', 28, 'maxwidth200 maxwidthonsmartphone');
|
||||||
} else {
|
} else {
|
||||||
print $form->select_country((!empty($obj->country_code) ? $obj->country_code : (!empty($obj->country) ? $obj->country : $mysoc->country_code)), $fieldname, '', 28, 'maxwidth200 maxwidthonsmartphone');
|
$preselectcountrycode = (empty($obj->country_code) ? (empty($obj->country) ? $mysoc->country_code : $obj->country) : $obj->country_code);
|
||||||
|
print $form->select_country($preselectcountrycode, $fieldname, '', 28, 'maxwidth200 maxwidthonsmartphone');
|
||||||
}
|
}
|
||||||
print '</td>';
|
print '</td>';
|
||||||
} elseif ($fieldlist[$field] == 'country_id') {
|
} elseif ($fieldlist[$field] == 'country_id') {
|
||||||
|
|||||||
@ -22,6 +22,7 @@
|
|||||||
* \brief Setup page to configure accounting expert module
|
* \brief Setup page to configure accounting expert module
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
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/accounting.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
||||||
@ -31,7 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formaccounting.class.php';
|
|||||||
$langs->loadLangs(array("compta", "admin", "accountancy"));
|
$langs->loadLangs(array("compta", "admin", "accountancy"));
|
||||||
|
|
||||||
// Security check
|
// Security check
|
||||||
if (empty($user->rights->accounting->chartofaccount)) {
|
if (!$user->hasRight('accounting', 'chartofaccount')) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -38,7 +38,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formaccounting.class.php';
|
|||||||
$langs->loadLangs(array("compta", "bills", "admin", "accountancy", "salaries", "loan"));
|
$langs->loadLangs(array("compta", "bills", "admin", "accountancy", "salaries", "loan"));
|
||||||
|
|
||||||
// Security check
|
// Security check
|
||||||
if (empty($user->rights->accounting->chartofaccount)) {
|
if (!$user->hasRight('accounting', 'chartofaccount')) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -313,7 +313,7 @@ print $formaccounting->select_account(getDolGlobalString('ACCOUNTING_ACCOUNT_SUP
|
|||||||
print '</td>';
|
print '</td>';
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
|
|
||||||
if (!empty($conf->societe->enabled) && getDolGlobalString('ACCOUNTING_ACCOUNT_SUPPLIER_DEPOSIT') && getDolGlobalString('ACCOUNTING_ACCOUNT_SUPPLIER_DEPOSIT') != '-1') {
|
if (isModEnabled('societe') && getDolGlobalString('ACCOUNTING_ACCOUNT_SUPPLIER_DEPOSIT') && getDolGlobalString('ACCOUNTING_ACCOUNT_SUPPLIER_DEPOSIT') != '-1') {
|
||||||
print '<tr class="oddeven">';
|
print '<tr class="oddeven">';
|
||||||
print '<td>' . img_picto('', 'supplier_invoice', 'class="pictofixedwidth"') . $langs->trans("UseAuxiliaryAccountOnSupplierDeposit") . '</td>';
|
print '<td>' . img_picto('', 'supplier_invoice', 'class="pictofixedwidth"') . $langs->trans("UseAuxiliaryAccountOnSupplierDeposit") . '</td>';
|
||||||
if (getDolGlobalInt('ACCOUNTING_ACCOUNT_SUPPLIER_USE_AUXILIARY_ON_DEPOSIT')) {
|
if (getDolGlobalInt('ACCOUNTING_ACCOUNT_SUPPLIER_USE_AUXILIARY_ON_DEPOSIT')) {
|
||||||
|
|||||||
@ -36,7 +36,7 @@ require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountancyexport.class.php';
|
|||||||
$langs->loadLangs(array("compta", "bills", "admin", "accountancy"));
|
$langs->loadLangs(array("compta", "bills", "admin", "accountancy"));
|
||||||
|
|
||||||
// Security access
|
// Security access
|
||||||
if (empty($user->rights->accounting->chartofaccount)) {
|
if (!$user->hasRight('accounting', 'chartofaccount')) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -21,6 +21,7 @@
|
|||||||
* \brief Setup page to configure fiscal year
|
* \brief Setup page to configure fiscal year
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/fiscalyear.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/class/fiscalyear.class.php';
|
||||||
@ -52,7 +53,7 @@ $langs->loadLangs(array("admin", "compta"));
|
|||||||
if ($user->socid > 0) {
|
if ($user->socid > 0) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
if (empty($user->rights->accounting->fiscalyear->write)) { // If we can read accounting records, we should be able to see fiscal year.
|
if (!$user->hasRight('accounting', 'fiscalyear', 'write')) { // If we can read accounting records, we should be able to see fiscal year.
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -22,6 +22,7 @@
|
|||||||
* \brief Page to show a fiscal year
|
* \brief Page to show a fiscal year
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/fiscalyear.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/fiscalyear.lib.php';
|
||||||
@ -34,7 +35,7 @@ $langs->loadLangs(array("admin", "compta"));
|
|||||||
if ($user->socid > 0) {
|
if ($user->socid > 0) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
if (empty($user->rights->accounting->fiscalyear->write)) {
|
if (!$user->hasRight('accounting', 'fiscalyear', 'write')) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -304,7 +305,7 @@ if ($action == 'create') {
|
|||||||
|
|
||||||
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=edit&token='.newToken().'&id='.$id.'">'.$langs->trans('Modify').'</a>';
|
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=edit&token='.newToken().'&id='.$id.'">'.$langs->trans('Modify').'</a>';
|
||||||
|
|
||||||
// print '<a class="butActionDelete" href="' . $_SERVER["PHP_SELF"] . '?action=delete&token='.newToken().'&id=' . $id . '">' . $langs->trans('Delete') . '</a>';
|
//print dolGetButtonAction($langs->trans("Delete"), '', 'delete', $_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete&token='.newToken(), 'delete', $permissiontodelete);
|
||||||
|
|
||||||
print '</div>';
|
print '</div>';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,6 +21,7 @@
|
|||||||
* \brief Page to show info of a fiscal year
|
* \brief Page to show info of a fiscal year
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/fiscalyear.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/fiscalyear.lib.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
|
||||||
@ -33,7 +34,7 @@ $langs->loadLangs(array("admin", "compta"));
|
|||||||
if ($user->socid > 0) {
|
if ($user->socid > 0) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
if (empty($user->rights->accounting->fiscalyear->write)) {
|
if (!$user->hasRight('accounting', 'fiscalyear', 'write')) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -29,6 +29,7 @@
|
|||||||
* \brief Setup page to configure accounting expert module
|
* \brief Setup page to configure accounting expert module
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
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/accounting.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
||||||
@ -38,7 +39,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
|||||||
$langs->loadLangs(array("compta", "bills", "admin", "accountancy", "other"));
|
$langs->loadLangs(array("compta", "bills", "admin", "accountancy", "other"));
|
||||||
|
|
||||||
// Security access
|
// Security access
|
||||||
if (empty($user->rights->accounting->chartofaccount)) {
|
if (!$user->hasRight('accounting', 'chartofaccount')) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -265,6 +266,9 @@ if (!$user->admin) {
|
|||||||
if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) {
|
if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) {
|
||||||
print '<div class="info">' . $langs->trans("ConstantIsOn", "FACTURE_DEPOSITS_ARE_JUST_PAYMENTS") . '</div>';
|
print '<div class="info">' . $langs->trans("ConstantIsOn", "FACTURE_DEPOSITS_ARE_JUST_PAYMENTS") . '</div>';
|
||||||
}
|
}
|
||||||
|
if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) {
|
||||||
|
print '<div class="info">' . $langs->trans("ConstantIsOn", "FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS") . '</div>';
|
||||||
|
}
|
||||||
if (!empty($conf->global->ACCOUNTANCY_USE_PRODUCT_ACCOUNT_ON_THIRDPARTY)) {
|
if (!empty($conf->global->ACCOUNTANCY_USE_PRODUCT_ACCOUNT_ON_THIRDPARTY)) {
|
||||||
print '<div class="info">' . $langs->trans("ConstantIsOn", "ACCOUNTANCY_USE_PRODUCT_ACCOUNT_ON_THIRDPARTY") . '</div>';
|
print '<div class="info">' . $langs->trans("ConstantIsOn", "ACCOUNTANCY_USE_PRODUCT_ACCOUNT_ON_THIRDPARTY") . '</div>';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,6 +26,7 @@ if (!defined('CSRFCHECK_WITH_TOKEN')) {
|
|||||||
define('CSRFCHECK_WITH_TOKEN', '1'); // Force use of CSRF protection with tokens even for GET
|
define('CSRFCHECK_WITH_TOKEN', '1'); // Force use of CSRF protection with tokens even for GET
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
|
||||||
@ -45,7 +46,7 @@ $rowid = GETPOST('rowid', 'alpha');
|
|||||||
$code = GETPOST('code', 'alpha');
|
$code = GETPOST('code', 'alpha');
|
||||||
|
|
||||||
// Security access
|
// Security access
|
||||||
if (empty($user->rights->accounting->chartofaccount)) {
|
if (!$user->hasRight('accounting', 'chartofaccount')) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -45,7 +45,7 @@ $langs->loadLangs(array("companies", "compta", "accountancy", "products"));
|
|||||||
if (!isModEnabled('accounting')) {
|
if (!isModEnabled('accounting')) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
if (empty($user->rights->accounting->bind->write)) {
|
if (!$user->hasRight('accounting', 'bind', 'write')) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -23,6 +23,7 @@
|
|||||||
* \brief List of accounting sub-account (auxiliary accounts)
|
* \brief List of accounting sub-account (auxiliary accounts)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
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/accounting.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
||||||
@ -47,7 +48,7 @@ $search_type = GETPOST('search_type', 'int');
|
|||||||
if ($user->socid > 0) {
|
if ($user->socid > 0) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
if (empty($user->rights->accounting->chartofaccount)) {
|
if (!$user->hasRight('accounting', 'chartofaccount')) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/* Copyright (C) 2016 Olivier Geffroy <jeff@jeffinfo.com>
|
/* Copyright (C) 2016 Olivier Geffroy <jeff@jeffinfo.com>
|
||||||
* Copyright (C) 2016 Florian Henry <florian.henry@open-concept.pro>
|
* Copyright (C) 2016 Florian Henry <florian.henry@open-concept.pro>
|
||||||
* Copyright (C) 2016-2021 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
* Copyright (C) 2016-2022 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||||
* Copyright (C) 2018 Frédéric France <frederic.france@netlogic.fr>
|
* Copyright (C) 2018 Frédéric France <frederic.france@netlogic.fr>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
@ -24,6 +24,7 @@
|
|||||||
* \brief Balance of book keeping
|
* \brief Balance of book keeping
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
|
|
||||||
// Class
|
// Class
|
||||||
@ -40,6 +41,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
|
|||||||
$langs->loadLangs(array("accountancy", "compta"));
|
$langs->loadLangs(array("accountancy", "compta"));
|
||||||
|
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
|
$optioncss = GETPOST('optioncss', 'alpha');
|
||||||
$contextpage = GETPOST('contextpage', 'aZ09');
|
$contextpage = GETPOST('contextpage', 'aZ09');
|
||||||
|
|
||||||
// Load variable for pagination
|
// Load variable for pagination
|
||||||
@ -148,7 +150,7 @@ if (!isModEnabled('accounting')) {
|
|||||||
if ($user->socid > 0) {
|
if ($user->socid > 0) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
if (empty($user->rights->accounting->mouvements->lire)) {
|
if (!$user->hasRight('accounting', 'mouvements', 'lire')) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -158,7 +160,8 @@ if (empty($user->rights->accounting->mouvements->lire)) {
|
|||||||
* Action
|
* Action
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$parameters = array('socid'=>$socid);
|
$parameters = array();
|
||||||
|
$arrayfields = array();
|
||||||
$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');
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/* Copyright (C) 2013-2017 Olivier Geffroy <jeff@jeffinfo.com>
|
/* Copyright (C) 2013-2017 Olivier Geffroy <jeff@jeffinfo.com>
|
||||||
* Copyright (C) 2013-2017 Florian Henry <florian.henry@open-concept.pro>
|
* Copyright (C) 2013-2017 Florian Henry <florian.henry@open-concept.pro>
|
||||||
* Copyright (C) 2013-2021 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
* Copyright (C) 2013-2022 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||||
* Copyright (C) 2017 Laurent Destailleur <eldy@users.sourceforge.net>
|
* Copyright (C) 2017 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
* Copyright (C) 2018-2020 Frédéric France <frederic.france@netlogic.fr>
|
* Copyright (C) 2018-2020 Frédéric France <frederic.france@netlogic.fr>
|
||||||
*
|
*
|
||||||
@ -25,6 +25,7 @@
|
|||||||
* \brief Page to show book-entry
|
* \brief Page to show book-entry
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/accountancy/class/bookkeeping.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/accountancy/class/bookkeeping.class.php';
|
||||||
@ -85,7 +86,7 @@ if (!isModEnabled('accounting')) {
|
|||||||
if ($user->socid > 0) {
|
if ($user->socid > 0) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
if (empty($user->rights->accounting->mouvements->lire)) {
|
if (!$user->hasRight('accounting', 'mouvements', 'lire')) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -332,7 +333,9 @@ if ($action == 'valid') {
|
|||||||
$html = new Form($db);
|
$html = new Form($db);
|
||||||
$formaccounting = new FormAccounting($db);
|
$formaccounting = new FormAccounting($db);
|
||||||
|
|
||||||
llxHeader('', $langs->trans("CreateMvts"));
|
$title = $langs->trans("CreateMvts");
|
||||||
|
|
||||||
|
llxHeader('', $title);
|
||||||
|
|
||||||
// Confirmation to delete the command
|
// Confirmation to delete the command
|
||||||
if ($action == 'delete') {
|
if ($action == 'delete') {
|
||||||
@ -341,7 +344,7 @@ if ($action == 'delete') {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($action == 'create') {
|
if ($action == 'create') {
|
||||||
print load_fiche_titre($langs->trans("CreateMvts"));
|
print load_fiche_titre($title);
|
||||||
|
|
||||||
$object = new BookKeeping($db);
|
$object = new BookKeeping($db);
|
||||||
$next_num_mvt = $object->getNextNumMvt('_tmp');
|
$next_num_mvt = $object->getNextNumMvt('_tmp');
|
||||||
@ -540,9 +543,11 @@ if ($action == 'create') {
|
|||||||
print '</td>';
|
print '</td>';
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
|
|
||||||
|
// Don't show in tmp mode, inevitably empty
|
||||||
|
if ($mode != "_tmp") {
|
||||||
// Date document export
|
// Date document export
|
||||||
print '<tr>';
|
print '<tr>';
|
||||||
print '<td class="titlefield">'.$langs->trans("DateExport").'</td>';
|
print '<td class="titlefield">' . $langs->trans("DateExport") . '</td>';
|
||||||
print '<td>';
|
print '<td>';
|
||||||
print $object->date_export ? dol_print_date($object->date_export, 'dayhour') : ' ';
|
print $object->date_export ? dol_print_date($object->date_export, 'dayhour') : ' ';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
@ -550,11 +555,12 @@ if ($action == 'create') {
|
|||||||
|
|
||||||
// Date document validation
|
// Date document validation
|
||||||
print '<tr>';
|
print '<tr>';
|
||||||
print '<td class="titlefield">'.$langs->trans("DateValidation").'</td>';
|
print '<td class="titlefield">' . $langs->trans("DateValidation") . '</td>';
|
||||||
print '<td>';
|
print '<td>';
|
||||||
print $object->date_validation ? dol_print_date($object->date_validation, 'dayhour') : ' ';
|
print $object->date_validation ? dol_print_date($object->date_validation, 'dayhour') : ' ';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
|
}
|
||||||
|
|
||||||
// Validate
|
// Validate
|
||||||
/*
|
/*
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
/* Copyright (C) 2013-2016 Olivier Geffroy <jeff@jeffinfo.com>
|
/* Copyright (C) 2013-2016 Olivier Geffroy <jeff@jeffinfo.com>
|
||||||
* Copyright (C) 2013-2016 Florian Henry <florian.henry@open-concept.pro>
|
* Copyright (C) 2013-2016 Florian Henry <florian.henry@open-concept.pro>
|
||||||
* Copyright (C) 2013-2021 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
* Copyright (C) 2013-2022 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||||
* Copyright (C) 2016-2017 Laurent Destailleur <eldy@users.sourceforge.net>
|
* Copyright (C) 2016-2017 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
* Copyright (C) 2018-2021 Frédéric France <frederic.france@netlogic.fr>
|
* Copyright (C) 2018-2021 Frédéric France <frederic.france@netlogic.fr>
|
||||||
*
|
*
|
||||||
@ -25,6 +25,7 @@
|
|||||||
* \brief List operation of book keeping
|
* \brief List operation of book keeping
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountancyexport.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountancyexport.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
||||||
@ -154,7 +155,7 @@ $hookmanager->initHooks(array('bookkeepinglist'));
|
|||||||
$formaccounting = new FormAccounting($db);
|
$formaccounting = new FormAccounting($db);
|
||||||
$form = new Form($db);
|
$form = new Form($db);
|
||||||
|
|
||||||
if (!in_array($action, array('export_file', 'delmouv', 'delmouvconfirm')) && !GETPOSTISSET('begin') && !GETPOSTISSET('formfilteraction') && GETPOST('page', 'int') == '' && !GETPOST('noreset', 'int') && $user->rights->accounting->mouvements->export) {
|
if (!in_array($action, array('export_file', 'delmouv', 'delmouvconfirm')) && !GETPOSTISSET('begin') && !GETPOSTISSET('formfilteraction') && GETPOST('page', 'int') == '' && !GETPOST('noreset', 'int') && $user->hasRight('accounting', 'mouvements', 'export')) {
|
||||||
if (empty($search_date_start) && empty($search_date_end) && !GETPOSTISSET('restore_lastsearch_values') && !GETPOST('search_accountancy_code_start')) {
|
if (empty($search_date_start) && empty($search_date_end) && !GETPOSTISSET('restore_lastsearch_values') && !GETPOST('search_accountancy_code_start')) {
|
||||||
$query = "SELECT date_start, date_end from ".MAIN_DB_PREFIX."accounting_fiscalyear ";
|
$query = "SELECT date_start, date_end from ".MAIN_DB_PREFIX."accounting_fiscalyear ";
|
||||||
$query .= " where date_start < '".$db->idate(dol_now())."' and date_end > '".$db->idate(dol_now())."' limit 1";
|
$query .= " where date_start < '".$db->idate(dol_now())."' and date_end > '".$db->idate(dol_now())."' limit 1";
|
||||||
@ -220,7 +221,7 @@ if (!isModEnabled('accounting')) {
|
|||||||
if ($user->socid > 0) {
|
if ($user->socid > 0) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
if (empty($user->rights->accounting->mouvements->lire)) {
|
if (!$user->hasRight('accounting', 'mouvements', 'lire')) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -234,7 +235,7 @@ $param = '';
|
|||||||
if (GETPOST('cancel', 'alpha')) {
|
if (GETPOST('cancel', 'alpha')) {
|
||||||
$action = 'list'; $massaction = '';
|
$action = 'list'; $massaction = '';
|
||||||
}
|
}
|
||||||
if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'preunlettering' && $massaction != 'predeletebookkeepingwriting') {
|
if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'preunletteringauto' && $massaction != 'preunletteringmanual' && $massaction != 'predeletebookkeepingwriting') {
|
||||||
$massaction = '';
|
$massaction = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -433,7 +434,7 @@ if (empty($reshook)) {
|
|||||||
$param .= '&search_import_key='.urlencode($search_import_key);
|
$param .= '&search_import_key='.urlencode($search_import_key);
|
||||||
}
|
}
|
||||||
|
|
||||||
//if ($action == 'delbookkeepingyearconfirm' && $user->rights->accounting->mouvements->supprimer_tous) {
|
//if ($action == 'delbookkeepingyearconfirm' && !$user->hasRight('accounting', 'mouvements', 'supprimer_tous')) {
|
||||||
// $delmonth = GETPOST('delmonth', 'int');
|
// $delmonth = GETPOST('delmonth', 'int');
|
||||||
// $delyear = GETPOST('delyear', 'int');
|
// $delyear = GETPOST('delyear', 'int');
|
||||||
// if ($delyear == -1) {
|
// if ($delyear == -1) {
|
||||||
@ -479,14 +480,26 @@ if (empty($reshook)) {
|
|||||||
// Mass actions
|
// Mass actions
|
||||||
$objectclass = 'Bookkeeping';
|
$objectclass = 'Bookkeeping';
|
||||||
$objectlabel = 'Bookkeeping';
|
$objectlabel = 'Bookkeeping';
|
||||||
$permissiontoread = $user->rights->societe->lire;
|
$permissiontoread = $user->hasRight('societe', 'lire');
|
||||||
$permissiontodelete = $user->rights->societe->supprimer;
|
$permissiontodelete = $user->hasRight('societe', 'supprimer');
|
||||||
$permissiontoadd = $user->rights->societe->creer;
|
$permissiontoadd = $user->rights->societe->creer;
|
||||||
$uploaddir = $conf->societe->dir_output;
|
$uploaddir = $conf->societe->dir_output;
|
||||||
include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';
|
include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';
|
||||||
|
|
||||||
if (!$error && $action == 'deletebookkeepingwriting' && $confirm == "yes" && $user->rights->accounting->mouvements->supprimer) {
|
if (!$error && $action == 'deletebookkeepingwriting' && $confirm == "yes" && $user->hasRight('accounting', 'mouvements', 'supprimer')) {
|
||||||
|
$db->begin();
|
||||||
|
|
||||||
|
if (getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING')) {
|
||||||
|
$lettering = new Lettering($db);
|
||||||
|
$nb_lettering = $lettering->bookkeepingLetteringAll($toselect, true);
|
||||||
|
if ($nb_lettering < 0) {
|
||||||
|
setEventMessages('', $lettering->errors, 'errors');
|
||||||
|
$error++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$nbok = 0;
|
$nbok = 0;
|
||||||
|
if (!$error) {
|
||||||
foreach ($toselect as $toselectid) {
|
foreach ($toselect as $toselectid) {
|
||||||
$result = $object->fetch($toselectid);
|
$result = $object->fetch($toselectid);
|
||||||
if ($result > 0 && (!isset($object->date_validation) || $object->date_validation === '')) {
|
if ($result > 0 && (!isset($object->date_validation) || $object->date_validation === '')) {
|
||||||
@ -504,25 +517,30 @@ if (empty($reshook)) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$error) {
|
||||||
|
$db->commit();
|
||||||
|
|
||||||
// Message for elements well deleted
|
// Message for elements well deleted
|
||||||
if ($nbok > 1) {
|
if ($nbok > 1) {
|
||||||
setEventMessages($langs->trans("RecordsDeleted", $nbok), null, 'mesgs');
|
setEventMessages($langs->trans("RecordsDeleted", $nbok), null, 'mesgs');
|
||||||
} elseif ($nbok > 0) {
|
} elseif ($nbok > 0) {
|
||||||
setEventMessages($langs->trans("RecordDeleted", $nbok), null, 'mesgs');
|
setEventMessages($langs->trans("RecordDeleted", $nbok), null, 'mesgs');
|
||||||
} elseif (!$error) {
|
} else {
|
||||||
setEventMessages($langs->trans("NoRecordDeleted"), null, 'mesgs');
|
setEventMessages($langs->trans("NoRecordDeleted"), null, 'mesgs');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$error) {
|
|
||||||
header("Location: ".$_SERVER["PHP_SELF"]."?noreset=1".($param ? '&'.$param : ''));
|
header("Location: ".$_SERVER["PHP_SELF"]."?noreset=1".($param ? '&'.$param : ''));
|
||||||
exit;
|
exit;
|
||||||
|
} else {
|
||||||
|
$db->rollback();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// others mass actions
|
// others mass actions
|
||||||
if (!$error && getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING') && $user->rights->accounting->mouvements->creer) {
|
if (!$error && getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING') && $user->hasRight('accounting', 'mouvements', 'creer')) {
|
||||||
if ($massaction == 'lettering') {
|
if ($massaction == 'letteringauto') {
|
||||||
$lettering = new Lettering($db);
|
$lettering = new Lettering($db);
|
||||||
$nb_lettering = $lettering->bookkeepingLetteringAll($toselect);
|
$nb_lettering = $lettering->bookkeepingLetteringAll($toselect);
|
||||||
if ($nb_lettering < 0) {
|
if ($nb_lettering < 0) {
|
||||||
@ -543,7 +561,17 @@ if (empty($reshook)) {
|
|||||||
header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param);
|
header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param);
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
} elseif ($action == 'unlettering' && $confirm == "yes") {
|
} elseif ($massaction == 'letteringmanual') {
|
||||||
|
$lettering = new Lettering($db);
|
||||||
|
$result = $lettering->updateLettering($toselect);
|
||||||
|
if ($result < 0) {
|
||||||
|
setEventMessages('', $lettering->errors, 'errors');
|
||||||
|
} else {
|
||||||
|
setEventMessages($langs->trans('AccountancyOneLetteringModifiedSuccessfully'), array(), 'mesgs');
|
||||||
|
header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param);
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
} elseif ($action == 'unletteringauto' && $confirm == "yes") {
|
||||||
$lettering = new Lettering($db);
|
$lettering = new Lettering($db);
|
||||||
$nb_lettering = $lettering->bookkeepingLetteringAll($toselect, true);
|
$nb_lettering = $lettering->bookkeepingLetteringAll($toselect, true);
|
||||||
if ($nb_lettering < 0) {
|
if ($nb_lettering < 0) {
|
||||||
@ -564,6 +592,16 @@ if (empty($reshook)) {
|
|||||||
header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param);
|
header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param);
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
|
} elseif ($action == 'unletteringmanual' && $confirm == "yes") {
|
||||||
|
$lettering = new Lettering($db);
|
||||||
|
$nb_lettering = $lettering->deleteLettering($toselect);
|
||||||
|
if ($result < 0) {
|
||||||
|
setEventMessages('', $lettering->errors, 'errors');
|
||||||
|
} else {
|
||||||
|
setEventMessages($langs->trans('AccountancyOneUnletteringModifiedSuccessfully'), array(), 'mesgs');
|
||||||
|
header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param);
|
||||||
|
exit();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -651,22 +689,29 @@ if (!empty($sortfield)) {
|
|||||||
|
|
||||||
// Export into a file with format defined into setup (FEC, CSV, ...)
|
// Export into a file with format defined into setup (FEC, CSV, ...)
|
||||||
// Must be after definition of $sql
|
// Must be after definition of $sql
|
||||||
if ($action == 'export_fileconfirm' && $user->rights->accounting->mouvements->export) {
|
if ($action == 'export_fileconfirm' && $user->hasRight('accounting', 'mouvements', 'export')) {
|
||||||
// TODO Replace the fetchAll to get all ->line followed by call to ->export(). It consumew too much memory on large export. Replace this with the query($sql) and loop on each line to export them.
|
// TODO Replace the fetchAll to get all ->line followed by call to ->export(). It consumes too much memory on large export.
|
||||||
|
// Replace this with the query($sql) and loop on each line to export them.
|
||||||
$result = $object->fetchAll($sortorder, $sortfield, 0, 0, $filter, 'AND', (empty($conf->global->ACCOUNTING_REEXPORT) ? 0 : 1));
|
$result = $object->fetchAll($sortorder, $sortfield, 0, 0, $filter, 'AND', (empty($conf->global->ACCOUNTING_REEXPORT) ? 0 : 1));
|
||||||
|
|
||||||
if ($result < 0) {
|
if ($result < 0) {
|
||||||
setEventMessages($object->error, $object->errors, 'errors');
|
setEventMessages($object->error, $object->errors, 'errors');
|
||||||
} else {
|
} else {
|
||||||
// Export files
|
// Export files then exit
|
||||||
$accountancyexport = new AccountancyExport($db);
|
$accountancyexport = new AccountancyExport($db);
|
||||||
|
|
||||||
|
$mimetype = $accountancyexport->getMimeType($formatexportset);
|
||||||
|
|
||||||
|
top_httphead($mimetype, 1);
|
||||||
|
|
||||||
|
// Output data on screen
|
||||||
$accountancyexport->export($object->lines, $formatexportset);
|
$accountancyexport->export($object->lines, $formatexportset);
|
||||||
|
|
||||||
$notifiedexportdate = GETPOST('notifiedexportdate', 'alpha');
|
$notifiedexportdate = GETPOST('notifiedexportdate', 'alpha');
|
||||||
$notifiedvalidationdate = GETPOST('notifiedvalidationdate', 'alpha');
|
$notifiedvalidationdate = GETPOST('notifiedvalidationdate', 'alpha');
|
||||||
|
|
||||||
if (!empty($accountancyexport->errors)) {
|
if (!empty($accountancyexport->errors)) {
|
||||||
setEventMessages('', $accountancyexport->errors, 'errors');
|
dol_print_error('', '', $accountancyexport->errors);
|
||||||
} elseif (!empty($notifiedexportdate) || !empty($notifiedvalidationdate)) {
|
} elseif (!empty($notifiedexportdate) || !empty($notifiedvalidationdate)) {
|
||||||
// Specify as export : update field date_export or date_validated
|
// Specify as export : update field date_export or date_validated
|
||||||
$error = 0;
|
$error = 0;
|
||||||
@ -700,11 +745,10 @@ if ($action == 'export_fileconfirm' && $user->rights->accounting->mouvements->ex
|
|||||||
|
|
||||||
if (!$error) {
|
if (!$error) {
|
||||||
$db->commit();
|
$db->commit();
|
||||||
// setEventMessages($langs->trans("AllExportedMovementsWereRecordedAsExportedOrValidated"), null, 'mesgs');
|
|
||||||
} else {
|
} else {
|
||||||
$error++;
|
$error++;
|
||||||
$db->rollback();
|
$db->rollback();
|
||||||
setEventMessages($langs->trans("NotAllExportedMovementsCouldBeRecordedAsExportedOrValidated"), null, 'errors');
|
dol_print_error('', $langs->trans("NotAllExportedMovementsCouldBeRecordedAsExportedOrValidated"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
exit;
|
exit;
|
||||||
@ -839,16 +883,16 @@ if ($limit > 0 && $limit != $conf->liste_limit) {
|
|||||||
|
|
||||||
// List of mass actions available
|
// List of mass actions available
|
||||||
$arrayofmassactions = array();
|
$arrayofmassactions = array();
|
||||||
/*
|
|
||||||
if (getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING') && $user->rights->accounting->mouvements->creer) {
|
if (getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING') && $user->rights->accounting->mouvements->creer) {
|
||||||
$arrayofmassactions['lettering'] = img_picto('', 'check', 'class="pictofixedwidth"') . $langs->trans('Lettering');
|
$arrayofmassactions['letteringauto'] = img_picto('', 'check', 'class="pictofixedwidth"') . $langs->trans('LetteringAuto');
|
||||||
$arrayofmassactions['preunlettering'] = img_picto('', 'uncheck', 'class="pictofixedwidth"') . $langs->trans('Unlettering');
|
$arrayofmassactions['preunletteringauto'] = img_picto('', 'uncheck', 'class="pictofixedwidth"') . $langs->trans('UnletteringAuto');
|
||||||
|
$arrayofmassactions['letteringmanual'] = img_picto('', 'check', 'class="pictofixedwidth"') . $langs->trans('LetteringManual');
|
||||||
|
$arrayofmassactions['preunletteringmanual'] = img_picto('', 'uncheck', 'class="pictofixedwidth"') . $langs->trans('UnletteringManual');
|
||||||
}
|
}
|
||||||
*/
|
if ($user->hasRight('accounting', 'mouvements', 'supprimer')) {
|
||||||
if ($user->rights->accounting->mouvements->supprimer) {
|
|
||||||
$arrayofmassactions['predeletebookkeepingwriting'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete");
|
$arrayofmassactions['predeletebookkeepingwriting'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete");
|
||||||
}
|
}
|
||||||
if (GETPOST('nomassaction', 'int') || in_array($massaction, array('preunlettering', 'predeletebookkeepingwriting'))) {
|
if (GETPOST('nomassaction', 'int') || in_array($massaction, array('preunletteringauto', 'preunletteringmanual', 'predeletebookkeepingwriting'))) {
|
||||||
$arrayofmassactions = array();
|
$arrayofmassactions = array();
|
||||||
}
|
}
|
||||||
$massactionbutton = $form->selectMassAction($massaction, $arrayofmassactions);
|
$massactionbutton = $form->selectMassAction($massaction, $arrayofmassactions);
|
||||||
@ -860,8 +904,8 @@ if ($optioncss != '') {
|
|||||||
print '<input type="hidden" name="optioncss" value="'.urlencode($optioncss).'">';
|
print '<input type="hidden" name="optioncss" value="'.urlencode($optioncss).'">';
|
||||||
}
|
}
|
||||||
print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
|
print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
|
||||||
print '<input type="hidden" name="sortfield" value="'.urlencode($sortfield).'">';
|
print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
|
||||||
print '<input type="hidden" name="sortorder" value="'.urlencode($sortorder).'">';
|
print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
|
||||||
print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
|
print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
|
||||||
|
|
||||||
if (count($filter)) {
|
if (count($filter)) {
|
||||||
@ -881,8 +925,8 @@ if (empty($reshook)) {
|
|||||||
}
|
}
|
||||||
$newcardbutton .= '<span class="valignmiddle marginrightonly">'.$langs->trans("IncludeDocsAlreadyExported").'</span>';
|
$newcardbutton .= '<span class="valignmiddle marginrightonly">'.$langs->trans("IncludeDocsAlreadyExported").'</span>';
|
||||||
|
|
||||||
if (!empty($user->rights->accounting->mouvements->export)) {
|
if ($user->hasRight('accounting', 'mouvements', 'export')) {
|
||||||
$newcardbutton .= dolGetButtonTitle($buttonLabel, $langs->trans("ExportFilteredList").' ('.$listofformat[$formatexportset].')', 'fa fa-file-export paddingleft', $_SERVER["PHP_SELF"].'?action=export_file'.($param ? '&'.$param : ''), $user->rights->accounting->mouvements->export);
|
$newcardbutton .= dolGetButtonTitle($buttonLabel, $langs->trans("ExportFilteredList").' ('.$listofformat[$formatexportset].')', 'fa fa-file-export paddingleft', $_SERVER["PHP_SELF"].'?action=export_file&token='.newToken().($param ? '&'.$param : ''), $user->hasRight('accounting', 'mouvements', 'export'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$newcardbutton .= dolGetButtonTitle($langs->trans('ViewFlatList'), '', 'fa fa-list paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/list.php?'.$param, '', 1, array('morecss' => 'marginleftonly btnTitleSelected'));
|
$newcardbutton .= dolGetButtonTitle($langs->trans('ViewFlatList'), '', 'fa fa-list paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/list.php?'.$param, '', 1, array('morecss' => 'marginleftonly btnTitleSelected'));
|
||||||
@ -893,13 +937,15 @@ if (empty($reshook)) {
|
|||||||
if (!empty($socid)) {
|
if (!empty($socid)) {
|
||||||
$url .= '&socid='.$socid;
|
$url .= '&socid='.$socid;
|
||||||
}
|
}
|
||||||
$newcardbutton .= dolGetButtonTitle($langs->trans('NewAccountingMvt'), '', 'fa fa-plus-circle paddingleft', $url, '', $user->rights->accounting->mouvements->creer);
|
$newcardbutton .= dolGetButtonTitle($langs->trans('NewAccountingMvt'), '', 'fa fa-plus-circle paddingleft', $url, '', $user->hasRight('accounting', 'mouvements', 'creer'));
|
||||||
}
|
}
|
||||||
|
|
||||||
print_barre_liste($title_page, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'title_accountancy', 0, $newcardbutton, '', $limit, 0, 0, 1);
|
print_barre_liste($title_page, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'title_accountancy', 0, $newcardbutton, '', $limit, 0, 0, 1);
|
||||||
|
|
||||||
if ($massaction == 'preunlettering') {
|
if ($massaction == 'preunletteringauto') {
|
||||||
print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassUnlettering"), $langs->trans("ConfirmMassUnletteringQuestion", count($toselect)), "unlettering", null, '', 0, 200, 500, 1);
|
print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassUnletteringAuto"), $langs->trans("ConfirmMassUnletteringQuestion", count($toselect)), "unletteringauto", null, '', 0, 200, 500, 1);
|
||||||
|
} elseif ($massaction == 'preunletteringmanual') {
|
||||||
|
print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassUnletteringManual"), $langs->trans("ConfirmMassUnletteringQuestion", count($toselect)), "unletteringmanual", null, '', 0, 200, 500, 1);
|
||||||
} elseif ($massaction == 'predeletebookkeepingwriting') {
|
} elseif ($massaction == 'predeletebookkeepingwriting') {
|
||||||
print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassDeleteBookkeepingWriting"), $langs->trans("ConfirmMassDeleteBookkeepingWritingQuestion", count($toselect)), "deletebookkeepingwriting", null, '', 0, 200, 500, 1);
|
print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassDeleteBookkeepingWriting"), $langs->trans("ConfirmMassDeleteBookkeepingWritingQuestion", count($toselect)), "deletebookkeepingwriting", null, '', 0, 200, 500, 1);
|
||||||
}
|
}
|
||||||
@ -939,7 +985,7 @@ if (!empty($arrayfields['t.piece_num']['checked'])) {
|
|||||||
// Code journal
|
// Code journal
|
||||||
if (!empty($arrayfields['t.code_journal']['checked'])) {
|
if (!empty($arrayfields['t.code_journal']['checked'])) {
|
||||||
print '<td class="liste_titre center">';
|
print '<td class="liste_titre center">';
|
||||||
print $formaccounting->multi_select_journal($search_ledger_code, 'search_ledger_code', 0, 1, 1, 1, 'small maxwidth150');
|
print $formaccounting->multi_select_journal($search_ledger_code, 'search_ledger_code', 0, 1, 1, 1, 'small maxwidth75');
|
||||||
print '</td>';
|
print '</td>';
|
||||||
}
|
}
|
||||||
// Date document
|
// Date document
|
||||||
@ -982,14 +1028,14 @@ if (!empty($arrayfields['t.subledger_account']['checked'])) {
|
|||||||
print $formaccounting->select_auxaccount($search_accountancy_aux_code_end, 'search_accountancy_aux_code_end', $langs->trans('to'), 'maxwidth250', 'subledgeraccount');
|
print $formaccounting->select_auxaccount($search_accountancy_aux_code_end, 'search_accountancy_aux_code_end', $langs->trans('to'), 'maxwidth250', 'subledgeraccount');
|
||||||
print '</div>';
|
print '</div>';
|
||||||
} else {
|
} else {
|
||||||
print '<input type="text" class="maxwidth75" name="search_accountancy_aux_code" value="'.$search_accountancy_aux_code.'">';
|
print '<input type="text" class="maxwidth75" name="search_accountancy_aux_code" value="'.dol_escape_htmltag($search_accountancy_aux_code).'">';
|
||||||
}
|
}
|
||||||
print '</td>';
|
print '</td>';
|
||||||
}
|
}
|
||||||
// Label operation
|
// Label operation
|
||||||
if (!empty($arrayfields['t.label_operation']['checked'])) {
|
if (!empty($arrayfields['t.label_operation']['checked'])) {
|
||||||
print '<td class="liste_titre">';
|
print '<td class="liste_titre">';
|
||||||
print '<input type="text" size="7" class="flat" name="search_mvt_label" value="'.$search_mvt_label.'"/>';
|
print '<input type="text" size="7" class="flat" name="search_mvt_label" value="'.dol_escape_htmltag($search_mvt_label).'"/>';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
}
|
}
|
||||||
// Debit
|
// Debit
|
||||||
@ -1007,7 +1053,7 @@ if (!empty($arrayfields['t.credit']['checked'])) {
|
|||||||
// Lettering code
|
// Lettering code
|
||||||
if (!empty($arrayfields['t.lettering_code']['checked'])) {
|
if (!empty($arrayfields['t.lettering_code']['checked'])) {
|
||||||
print '<td class="liste_titre center">';
|
print '<td class="liste_titre center">';
|
||||||
print '<input type="text" size="3" class="flat" name="search_lettering_code" value="'.$search_lettering_code.'"/>';
|
print '<input type="text" size="3" class="flat" name="search_lettering_code" value="'.dol_escape_htmltag($search_lettering_code).'"/>';
|
||||||
print '<br><span class="nowrap"><input type="checkbox" name="search_not_reconciled" value="notreconciled"'.($search_not_reconciled == 'notreconciled' ? ' checked' : '').'>'.$langs->trans("NotReconciled").'</span>';
|
print '<br><span class="nowrap"><input type="checkbox" name="search_not_reconciled" value="notreconciled"'.($search_not_reconciled == 'notreconciled' ? ' checked' : '').'>'.$langs->trans("NotReconciled").'</span>';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
}
|
}
|
||||||
@ -1115,10 +1161,10 @@ if (!empty($arrayfields['t.tms']['checked'])) {
|
|||||||
print_liste_field_titre($arrayfields['t.tms']['label'], $_SERVER['PHP_SELF'], "t.tms", "", $param, '', $sortfield, $sortorder, 'center ');
|
print_liste_field_titre($arrayfields['t.tms']['label'], $_SERVER['PHP_SELF'], "t.tms", "", $param, '', $sortfield, $sortorder, 'center ');
|
||||||
}
|
}
|
||||||
if (!empty($arrayfields['t.date_export']['checked'])) {
|
if (!empty($arrayfields['t.date_export']['checked'])) {
|
||||||
print_liste_field_titre($arrayfields['t.date_export']['label'], $_SERVER['PHP_SELF'], "t.date_export", "", $param, '', $sortfield, $sortorder, 'center ');
|
print_liste_field_titre($arrayfields['t.date_export']['label'], $_SERVER['PHP_SELF'], "t.date_export,t.doc_date", "", $param, '', $sortfield, $sortorder, 'center ');
|
||||||
}
|
}
|
||||||
if (!empty($arrayfields['t.date_validated']['checked'])) {
|
if (!empty($arrayfields['t.date_validated']['checked'])) {
|
||||||
print_liste_field_titre($arrayfields['t.date_validated']['label'], $_SERVER['PHP_SELF'], "t.date_validated", "", $param, '', $sortfield, $sortorder, 'center ');
|
print_liste_field_titre($arrayfields['t.date_validated']['label'], $_SERVER['PHP_SELF'], "t.date_validated,t.doc_date", "", $param, '', $sortfield, $sortorder, 'center ');
|
||||||
}
|
}
|
||||||
if (!empty($arrayfields['t.import_key']['checked'])) {
|
if (!empty($arrayfields['t.import_key']['checked'])) {
|
||||||
print_liste_field_titre($arrayfields['t.import_key']['label'], $_SERVER["PHP_SELF"], "t.import_key", "", $param, '', $sortfield, $sortorder, 'center ');
|
print_liste_field_titre($arrayfields['t.import_key']['label'], $_SERVER["PHP_SELF"], "t.import_key", "", $param, '', $sortfield, $sortorder, 'center ');
|
||||||
@ -1136,6 +1182,9 @@ $totalarray = array();
|
|||||||
$totalarray['nbfield'] = 0;
|
$totalarray['nbfield'] = 0;
|
||||||
$total_debit = 0;
|
$total_debit = 0;
|
||||||
$total_credit = 0;
|
$total_credit = 0;
|
||||||
|
$totalarray['val'] = array ();
|
||||||
|
$totalarray['val']['totaldebit'] = 0;
|
||||||
|
$totalarray['val']['totalcredit'] = 0;
|
||||||
|
|
||||||
while ($i < min($num, $limit)) {
|
while ($i < min($num, $limit)) {
|
||||||
$obj = $db->fetch_object($resql);
|
$obj = $db->fetch_object($resql);
|
||||||
|
|||||||
@ -25,6 +25,7 @@
|
|||||||
* \brief List operation of ledger ordered by account number
|
* \brief List operation of ledger ordered by account number
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
||||||
@ -193,7 +194,7 @@ if (!isModEnabled('accounting')) {
|
|||||||
if ($user->socid > 0) {
|
if ($user->socid > 0) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
if (empty($user->rights->accounting->mouvements->lire)) {
|
if (!$user->hasRight('accounting', 'mouvements', 'lire')) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -208,7 +209,7 @@ if (GETPOST('cancel', 'alpha')) {
|
|||||||
$action = 'list';
|
$action = 'list';
|
||||||
$massaction = '';
|
$massaction = '';
|
||||||
}
|
}
|
||||||
if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'preunlettering' && $massaction != 'predeletebookkeepingwriting') {
|
if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'preunletteringauto' && $massaction != 'preunletteringmanual' && $massaction != 'predeletebookkeepingwriting') {
|
||||||
$massaction = '';
|
$massaction = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -394,14 +395,26 @@ if (empty($reshook)) {
|
|||||||
// Mass actions
|
// Mass actions
|
||||||
$objectclass = 'Bookkeeping';
|
$objectclass = 'Bookkeeping';
|
||||||
$objectlabel = 'Bookkeeping';
|
$objectlabel = 'Bookkeeping';
|
||||||
$permissiontoread = $user->rights->societe->lire;
|
$permissiontoread = $user->hasRight('societe', 'lire');
|
||||||
$permissiontodelete = $user->rights->societe->supprimer;
|
$permissiontodelete = $user->hasRight('societe', 'supprimer');
|
||||||
$permissiontoadd = $user->rights->societe->creer;
|
$permissiontoadd = $user->rights->societe->creer;
|
||||||
$uploaddir = $conf->societe->dir_output;
|
$uploaddir = $conf->societe->dir_output;
|
||||||
include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';
|
include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';
|
||||||
|
|
||||||
if (!$error && $action == 'deletebookkeepingwriting' && $confirm == "yes" && $user->rights->accounting->mouvements->supprimer) {
|
if (!$error && $action == 'deletebookkeepingwriting' && $confirm == "yes" && $user->hasRight('accounting', 'mouvements', 'supprimer')) {
|
||||||
|
$db->begin();
|
||||||
|
|
||||||
|
if (getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING')) {
|
||||||
|
$lettering = new Lettering($db);
|
||||||
|
$nb_lettering = $lettering->bookkeepingLetteringAll($toselect, true);
|
||||||
|
if ($nb_lettering < 0) {
|
||||||
|
setEventMessages('', $lettering->errors, 'errors');
|
||||||
|
$error++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$nbok = 0;
|
$nbok = 0;
|
||||||
|
if (!$error) {
|
||||||
foreach ($toselect as $toselectid) {
|
foreach ($toselect as $toselectid) {
|
||||||
$result = $object->fetch($toselectid);
|
$result = $object->fetch($toselectid);
|
||||||
if ($result > 0 && (!isset($object->date_validation) || $object->date_validation === '')) {
|
if ($result > 0 && (!isset($object->date_validation) || $object->date_validation === '')) {
|
||||||
@ -419,6 +432,10 @@ if (empty($reshook)) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$error) {
|
||||||
|
$db->commit();
|
||||||
|
|
||||||
// Message for elements well deleted
|
// Message for elements well deleted
|
||||||
if ($nbok > 1) {
|
if ($nbok > 1) {
|
||||||
@ -429,15 +446,16 @@ if (empty($reshook)) {
|
|||||||
setEventMessages($langs->trans("NoRecordDeleted"), null, 'mesgs');
|
setEventMessages($langs->trans("NoRecordDeleted"), null, 'mesgs');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$error) {
|
|
||||||
header("Location: ".$_SERVER["PHP_SELF"]."?noreset=1".($param ? '&'.$param : ''));
|
header("Location: ".$_SERVER["PHP_SELF"]."?noreset=1".($param ? '&'.$param : ''));
|
||||||
exit;
|
exit;
|
||||||
|
} else {
|
||||||
|
$db->rollback();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// others mass actions
|
// others mass actions
|
||||||
if (!$error && getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING') && $user->rights->accounting->mouvements->creer) {
|
if (!$error && getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING') && $user->hasRight('accounting', 'mouvements', 'creer')) {
|
||||||
if ($massaction == 'lettering') {
|
if ($massaction == 'letteringauto') {
|
||||||
$lettering = new Lettering($db);
|
$lettering = new Lettering($db);
|
||||||
$nb_lettering = $lettering->bookkeepingLetteringAll($toselect);
|
$nb_lettering = $lettering->bookkeepingLetteringAll($toselect);
|
||||||
if ($nb_lettering < 0) {
|
if ($nb_lettering < 0) {
|
||||||
@ -458,7 +476,17 @@ if (empty($reshook)) {
|
|||||||
header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param);
|
header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param);
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
} elseif ($action == 'unlettering' && $confirm == "yes") {
|
} elseif ($massaction == 'letteringmanual') {
|
||||||
|
$lettering = new Lettering($db);
|
||||||
|
$result = $lettering->updateLettering($toselect);
|
||||||
|
if ($result < 0) {
|
||||||
|
setEventMessages('', $lettering->errors, 'errors');
|
||||||
|
} else {
|
||||||
|
setEventMessages($langs->trans('AccountancyOneLetteringModifiedSuccessfully'), array(), 'mesgs');
|
||||||
|
header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param);
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
} elseif ($action == 'unletteringauto' && $confirm == "yes") {
|
||||||
$lettering = new Lettering($db);
|
$lettering = new Lettering($db);
|
||||||
$nb_lettering = $lettering->bookkeepingLetteringAll($toselect, true);
|
$nb_lettering = $lettering->bookkeepingLetteringAll($toselect, true);
|
||||||
if ($nb_lettering < 0) {
|
if ($nb_lettering < 0) {
|
||||||
@ -479,6 +507,16 @@ if (empty($reshook)) {
|
|||||||
header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param);
|
header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param);
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
|
} elseif ($action == 'unletteringmanual' && $confirm == "yes") {
|
||||||
|
$lettering = new Lettering($db);
|
||||||
|
$nb_lettering = $lettering->deleteLettering($toselect);
|
||||||
|
if ($result < 0) {
|
||||||
|
setEventMessages('', $lettering->errors, 'errors');
|
||||||
|
} else {
|
||||||
|
setEventMessages($langs->trans('AccountancyOneUnletteringModifiedSuccessfully'), array(), 'mesgs');
|
||||||
|
header('Location: ' . $_SERVER['PHP_SELF'] . '?noreset=1' . $param);
|
||||||
|
exit();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -578,14 +616,16 @@ print $formconfirm;
|
|||||||
|
|
||||||
// List of mass actions available
|
// List of mass actions available
|
||||||
$arrayofmassactions = array();
|
$arrayofmassactions = array();
|
||||||
if (getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING') && $user->rights->accounting->mouvements->creer) {
|
if (getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING') && $user->hasRight('accounting', 'mouvements', 'creer')) {
|
||||||
$arrayofmassactions['lettering'] = img_picto('', 'check', 'class="pictofixedwidth"') . $langs->trans('Lettering');
|
$arrayofmassactions['letteringauto'] = img_picto('', 'check', 'class="pictofixedwidth"') . $langs->trans('LetteringAuto');
|
||||||
$arrayofmassactions['preunlettering'] = img_picto('', 'uncheck', 'class="pictofixedwidth"') . $langs->trans('Unlettering');
|
$arrayofmassactions['preunletteringauto'] = img_picto('', 'uncheck', 'class="pictofixedwidth"') . $langs->trans('UnletteringAuto');
|
||||||
|
$arrayofmassactions['letteringmanual'] = img_picto('', 'check', 'class="pictofixedwidth"') . $langs->trans('LetteringManual');
|
||||||
|
$arrayofmassactions['preunletteringmanual'] = img_picto('', 'uncheck', 'class="pictofixedwidth"') . $langs->trans('UnletteringManual');
|
||||||
}
|
}
|
||||||
if ($user->rights->accounting->mouvements->supprimer) {
|
if ($user->hasRight('accounting', 'mouvements', 'supprimer')) {
|
||||||
$arrayofmassactions['predeletebookkeepingwriting'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete");
|
$arrayofmassactions['predeletebookkeepingwriting'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete");
|
||||||
}
|
}
|
||||||
if (GETPOST('nomassaction', 'int') || in_array($massaction, array('preunlettering', 'predeletebookkeepingwriting'))) {
|
if (GETPOST('nomassaction', 'int') || in_array($massaction, array('preunletteringauto', 'preunletteringmanual', 'predeletebookkeepingwriting'))) {
|
||||||
$arrayofmassactions = array();
|
$arrayofmassactions = array();
|
||||||
}
|
}
|
||||||
$massactionbutton = $form->selectMassAction($massaction, $arrayofmassactions);
|
$massactionbutton = $form->selectMassAction($massaction, $arrayofmassactions);
|
||||||
@ -625,8 +665,10 @@ if ($limit > 0 && $limit != $conf->liste_limit) {
|
|||||||
|
|
||||||
print_barre_liste($title_page, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $result, $nbtotalofrecords, 'title_accountancy', 0, $newcardbutton, '', $limit, 0, 0, 1);
|
print_barre_liste($title_page, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $result, $nbtotalofrecords, 'title_accountancy', 0, $newcardbutton, '', $limit, 0, 0, 1);
|
||||||
|
|
||||||
if ($massaction == 'preunlettering') {
|
if ($massaction == 'preunletteringauto') {
|
||||||
print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassUnlettering"), $langs->trans("ConfirmMassUnletteringQuestion", count($toselect)), "unlettering", null, '', 0, 200, 500, 1);
|
print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassUnletteringAuto"), $langs->trans("ConfirmMassUnletteringQuestion", count($toselect)), "unletteringauto", null, '', 0, 200, 500, 1);
|
||||||
|
} elseif ($massaction == 'preunletteringmanual') {
|
||||||
|
print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassUnletteringManual"), $langs->trans("ConfirmMassUnletteringQuestion", count($toselect)), "unletteringmanual", null, '', 0, 200, 500, 1);
|
||||||
} elseif ($massaction == 'predeletebookkeepingwriting') {
|
} elseif ($massaction == 'predeletebookkeepingwriting') {
|
||||||
print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassDeleteBookkeepingWriting"), $langs->trans("ConfirmMassDeleteBookkeepingWritingQuestion", count($toselect)), "deletebookkeepingwriting", null, '', 0, 200, 500, 1);
|
print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmMassDeleteBookkeepingWriting"), $langs->trans("ConfirmMassDeleteBookkeepingWritingQuestion", count($toselect)), "deletebookkeepingwriting", null, '', 0, 200, 500, 1);
|
||||||
}
|
}
|
||||||
@ -701,12 +743,12 @@ print '<tr class="liste_titre_filter">';
|
|||||||
|
|
||||||
// Movement number
|
// Movement number
|
||||||
if (!empty($arrayfields['t.piece_num']['checked'])) {
|
if (!empty($arrayfields['t.piece_num']['checked'])) {
|
||||||
print '<td class="liste_titre"><input type="text" name="search_mvt_num" size="6" value="'.dol_escape_htmltag($search_mvt_num).'"></td>';
|
print '<td class="liste_titre"><input type="text" name="search_mvt_num" class="width50" value="'.dol_escape_htmltag($search_mvt_num).'"></td>';
|
||||||
}
|
}
|
||||||
// Code journal
|
// Code journal
|
||||||
if (!empty($arrayfields['t.code_journal']['checked'])) {
|
if (!empty($arrayfields['t.code_journal']['checked'])) {
|
||||||
print '<td class="liste_titre center">';
|
print '<td class="liste_titre center">';
|
||||||
print $formaccounting->multi_select_journal($search_ledger_code, 'search_ledger_code', 0, 1, 1, 1);
|
print $formaccounting->multi_select_journal($search_ledger_code, 'search_ledger_code', 0, 1, 1, 1, 'maxwidth75');
|
||||||
print '</td>';
|
print '</td>';
|
||||||
}
|
}
|
||||||
// Date document
|
// Date document
|
||||||
@ -824,17 +866,22 @@ print $hookmanager->resPrint;
|
|||||||
print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ');
|
print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ');
|
||||||
print "</tr>\n";
|
print "</tr>\n";
|
||||||
|
|
||||||
|
|
||||||
$total_debit = 0;
|
|
||||||
$total_credit = 0;
|
|
||||||
$sous_total_debit = 0;
|
|
||||||
$sous_total_credit = 0;
|
|
||||||
$displayed_account_number = null; // Start with undefined to be able to distinguish with empty
|
$displayed_account_number = null; // Start with undefined to be able to distinguish with empty
|
||||||
|
|
||||||
// Loop on record
|
// Loop on record
|
||||||
// --------------------------------------------------------------------
|
// --------------------------------------------------------------------
|
||||||
$i = 0;
|
$i = 0;
|
||||||
|
|
||||||
$totalarray = array();
|
$totalarray = array();
|
||||||
|
$totalarray['val'] = array ();
|
||||||
|
$totalarray['nbfield'] = 0;
|
||||||
|
$total_debit = 0;
|
||||||
|
$total_credit = 0;
|
||||||
|
$sous_total_debit = 0;
|
||||||
|
$sous_total_credit = 0;
|
||||||
|
$totalarray['val']['totaldebit'] = 0;
|
||||||
|
$totalarray['val']['totalcredit'] = 0;
|
||||||
|
|
||||||
while ($i < min($num, $limit)) {
|
while ($i < min($num, $limit)) {
|
||||||
$line = $object->lines[$i];
|
$line = $object->lines[$i];
|
||||||
|
|
||||||
|
|||||||
@ -785,12 +785,13 @@ class AccountancyCategory // extends CommonObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return list of custom groups that are active
|
* Return list of custom groups.
|
||||||
*
|
*
|
||||||
* @param int $categorytype -1=All, 0=Only non computed groups, 1=Only computed groups
|
* @param int $categorytype -1=All, 0=Only non computed groups, 1=Only computed groups
|
||||||
|
* @param int $active 1= active, 0=not active
|
||||||
* @return array|int Array of groups or -1 if error
|
* @return array|int Array of groups or -1 if error
|
||||||
*/
|
*/
|
||||||
public function getCats($categorytype = -1)
|
public function getCats($categorytype = -1, $active = 1)
|
||||||
{
|
{
|
||||||
global $conf, $mysoc;
|
global $conf, $mysoc;
|
||||||
|
|
||||||
@ -801,7 +802,7 @@ class AccountancyCategory // extends CommonObject
|
|||||||
|
|
||||||
$sql = "SELECT c.rowid, c.code, c.label, c.formula, c.position, c.category_type, c.sens";
|
$sql = "SELECT c.rowid, c.code, c.label, c.formula, c.position, c.category_type, c.sens";
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."c_accounting_category as c";
|
$sql .= " FROM ".MAIN_DB_PREFIX."c_accounting_category as c";
|
||||||
$sql .= " WHERE c.active = 1";
|
$sql .= " WHERE c.active = " . (int) $active;
|
||||||
$sql .= " AND c.entity = ".$conf->entity;
|
$sql .= " AND c.entity = ".$conf->entity;
|
||||||
if ($categorytype >= 0) {
|
if ($categorytype >= 0) {
|
||||||
$sql .= " AND c.category_type = 1";
|
$sql .= " AND c.category_type = 1";
|
||||||
|
|||||||
@ -286,6 +286,28 @@ class AccountancyExport
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the MIME type of a file
|
||||||
|
*
|
||||||
|
* @param int $formatexportset Id of export format
|
||||||
|
* @return string MIME type.
|
||||||
|
*/
|
||||||
|
public function getMimeType($formatexportset)
|
||||||
|
{
|
||||||
|
$mime = 'text/csv';
|
||||||
|
|
||||||
|
switch ($formatexportset) {
|
||||||
|
case self::$EXPORT_TYPE_FEC:
|
||||||
|
$mime = 'text/tab-separated-values';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$mime = 'text/csv';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $mime;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function who chose which export to use with the default config, and make the export into a file
|
* Function who chose which export to use with the default config, and make the export into a file
|
||||||
*
|
*
|
||||||
@ -1347,7 +1369,7 @@ class AccountancyExport
|
|||||||
}
|
}
|
||||||
print $nature_piece.$separator;
|
print $nature_piece.$separator;
|
||||||
// RACI
|
// RACI
|
||||||
// if (! empty($line->subledger_account)) {
|
// if (!empty($line->subledger_account)) {
|
||||||
// if ($line->doc_type == 'supplier_invoice') {
|
// if ($line->doc_type == 'supplier_invoice') {
|
||||||
// $racine_subledger_account = '40';
|
// $racine_subledger_account = '40';
|
||||||
// } elseif ($line->doc_type == 'customer_invoice') {
|
// } elseif ($line->doc_type == 'customer_invoice') {
|
||||||
@ -1610,7 +1632,7 @@ class AccountancyExport
|
|||||||
}
|
}
|
||||||
print $nature_piece.$separator;
|
print $nature_piece.$separator;
|
||||||
// RACI
|
// RACI
|
||||||
// if (! empty($line->subledger_account)) {
|
// if (!empty($line->subledger_account)) {
|
||||||
// if ($line->doc_type == 'supplier_invoice') {
|
// if ($line->doc_type == 'supplier_invoice') {
|
||||||
// $racine_subledger_account = '40';
|
// $racine_subledger_account = '40';
|
||||||
// } elseif ($line->doc_type == 'customer_invoice') {
|
// } elseif ($line->doc_type == 'customer_invoice') {
|
||||||
|
|||||||
@ -811,9 +811,9 @@ class AccountingAccount extends CommonObject
|
|||||||
$suggestedaccountingaccountfor = '';
|
$suggestedaccountingaccountfor = '';
|
||||||
if ((($buyer->country_code == $seller->country_code) || empty($buyer->country_code))) {
|
if ((($buyer->country_code == $seller->country_code) || empty($buyer->country_code))) {
|
||||||
// If buyer in same country than seller (if not defined, we assume it is same country)
|
// If buyer in same country than seller (if not defined, we assume it is same country)
|
||||||
if ($type=='customer' && !empty($product->accountancy_code_sell)) {
|
if ($type == 'customer' && !empty($product->accountancy_code_sell)) {
|
||||||
$code_p = $product->accountancy_code_sell;
|
$code_p = $product->accountancy_code_sell;
|
||||||
} elseif ($type=='supplier' && !empty($product->accountancy_code_buy)) {
|
} elseif ($type == 'supplier' && !empty($product->accountancy_code_buy)) {
|
||||||
$code_p = $product->accountancy_code_buy;
|
$code_p = $product->accountancy_code_buy;
|
||||||
}
|
}
|
||||||
$suggestedid = $accountingAccount['dom'];
|
$suggestedid = $accountingAccount['dom'];
|
||||||
@ -821,36 +821,36 @@ class AccountingAccount extends CommonObject
|
|||||||
} else {
|
} else {
|
||||||
if ($isSellerInEEC && $isBuyerInEEC && $factureDet->tva_tx != 0) {
|
if ($isSellerInEEC && $isBuyerInEEC && $factureDet->tva_tx != 0) {
|
||||||
// European intravat sale, but with VAT
|
// European intravat sale, but with VAT
|
||||||
if ($type=='customer' && !empty($product->accountancy_code_sell)) {
|
if ($type == 'customer' && !empty($product->accountancy_code_sell)) {
|
||||||
$code_p = $product->accountancy_code_sell;
|
$code_p = $product->accountancy_code_sell;
|
||||||
} elseif ($type=='supplier' && !empty($product->accountancy_code_buy)) {
|
} elseif ($type == 'supplier' && !empty($product->accountancy_code_buy)) {
|
||||||
$code_p = $product->accountancy_code_buy;
|
$code_p = $product->accountancy_code_buy;
|
||||||
}
|
}
|
||||||
$suggestedid = $accountingAccount['dom'];
|
$suggestedid = $accountingAccount['dom'];
|
||||||
$suggestedaccountingaccountfor = 'eecwithvat';
|
$suggestedaccountingaccountfor = 'eecwithvat';
|
||||||
} elseif ($isSellerInEEC && $isBuyerInEEC && empty($buyer->tva_intra)) {
|
} elseif ($isSellerInEEC && $isBuyerInEEC && empty($buyer->tva_intra)) {
|
||||||
// European intravat sale, without VAT intra community number
|
// European intravat sale, without VAT intra community number
|
||||||
if ($type=='customer' && !empty($product->accountancy_code_sell)) {
|
if ($type == 'customer' && !empty($product->accountancy_code_sell)) {
|
||||||
$code_p = $product->accountancy_code_sell;
|
$code_p = $product->accountancy_code_sell;
|
||||||
} elseif ($type=='supplier' && !empty($product->accountancy_code_buy)) {
|
} elseif ($type == 'supplier' && !empty($product->accountancy_code_buy)) {
|
||||||
$code_p = $product->accountancy_code_buy;
|
$code_p = $product->accountancy_code_buy;
|
||||||
}
|
}
|
||||||
$suggestedid = $accountingAccount['dom']; // There is a doubt for this case. Is it an error on vat or we just forgot to fill vat number ?
|
$suggestedid = $accountingAccount['dom']; // There is a doubt for this case. Is it an error on vat or we just forgot to fill vat number ?
|
||||||
$suggestedaccountingaccountfor = 'eecwithoutvatnumber';
|
$suggestedaccountingaccountfor = 'eecwithoutvatnumber';
|
||||||
} elseif ($isSellerInEEC && $isBuyerInEEC && !empty($product->accountancy_code_sell_intra)) {
|
} elseif ($isSellerInEEC && $isBuyerInEEC && !empty($product->accountancy_code_sell_intra)) {
|
||||||
// European intravat sale
|
// European intravat sale
|
||||||
if ($type=='customer' && !empty($product->accountancy_code_sell_intra)) {
|
if ($type == 'customer' && !empty($product->accountancy_code_sell_intra)) {
|
||||||
$code_p = $product->accountancy_code_sell_intra;
|
$code_p = $product->accountancy_code_sell_intra;
|
||||||
} elseif ($type=='supplier' && !empty($product->accountancy_code_buy_intra)) {
|
} elseif ($type == 'supplier' && !empty($product->accountancy_code_buy_intra)) {
|
||||||
$code_p = $product->accountancy_code_buy_intra;
|
$code_p = $product->accountancy_code_buy_intra;
|
||||||
}
|
}
|
||||||
$suggestedid = $accountingAccount['intra'];
|
$suggestedid = $accountingAccount['intra'];
|
||||||
$suggestedaccountingaccountfor = 'eec';
|
$suggestedaccountingaccountfor = 'eec';
|
||||||
} else {
|
} else {
|
||||||
// Foreign sale
|
// Foreign sale
|
||||||
if ($type=='customer' && !empty($product->accountancy_code_sell_export)) {
|
if ($type == 'customer' && !empty($product->accountancy_code_sell_export)) {
|
||||||
$code_p = $product->accountancy_code_sell_export;
|
$code_p = $product->accountancy_code_sell_export;
|
||||||
} elseif ($type=='supplier' && !empty($product->accountancy_code_buy_export)) {
|
} elseif ($type == 'supplier' && !empty($product->accountancy_code_buy_export)) {
|
||||||
$code_p = $product->accountancy_code_buy_export;
|
$code_p = $product->accountancy_code_buy_export;
|
||||||
}
|
}
|
||||||
$suggestedid = $accountingAccount['export'];
|
$suggestedid = $accountingAccount['export'];
|
||||||
@ -870,12 +870,12 @@ class AccountingAccount extends CommonObject
|
|||||||
// Manage Deposit
|
// Manage Deposit
|
||||||
if ($factureDet->desc == "(DEPOSIT)" || $facture->type == $facture::TYPE_DEPOSIT) {
|
if ($factureDet->desc == "(DEPOSIT)" || $facture->type == $facture::TYPE_DEPOSIT) {
|
||||||
$accountdeposittoventilated = new self($this->db);
|
$accountdeposittoventilated = new self($this->db);
|
||||||
if ($type=='customer') {
|
if ($type == 'customer') {
|
||||||
$result = $accountdeposittoventilated->fetch('', $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER_DEPOSIT, 1);
|
$result = $accountdeposittoventilated->fetch('', $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER_DEPOSIT, 1);
|
||||||
} elseif ($type=='supplier') {
|
} elseif ($type == 'supplier') {
|
||||||
$result = $accountdeposittoventilated->fetch('', $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER_DEPOSIT, 1);
|
$result = $accountdeposittoventilated->fetch('', $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER_DEPOSIT, 1);
|
||||||
}
|
}
|
||||||
if ($result < 0) {
|
if (isset($result) && $result < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -441,26 +441,40 @@ class AccountingJournal extends CommonObject
|
|||||||
$langs->loadLangs(array("assets"));
|
$langs->loadLangs(array("assets"));
|
||||||
|
|
||||||
// Clean parameters
|
// Clean parameters
|
||||||
if (empty($type)) $type = 'view';
|
if (empty($type)) {
|
||||||
if (empty($in_bookkeeping)) $in_bookkeeping = 'notyet';
|
$type = 'view';
|
||||||
|
}
|
||||||
|
if (empty($in_bookkeeping)) {
|
||||||
|
$in_bookkeeping = 'notyet';
|
||||||
|
}
|
||||||
|
|
||||||
$sql = "";
|
$sql = "";
|
||||||
if ($in_bookkeeping == 'already' || $in_bookkeeping == 'notyet') {
|
|
||||||
|
// FIXME sql error with Mysql 5.7
|
||||||
|
/*if ($in_bookkeeping == 'already' || $in_bookkeeping == 'notyet') {
|
||||||
$sql .= "WITH in_accounting_bookkeeping(fk_docdet) AS (";
|
$sql .= "WITH in_accounting_bookkeeping(fk_docdet) AS (";
|
||||||
$sql .= " SELECT DISTINCT fk_docdet";
|
$sql .= " SELECT DISTINCT fk_docdet";
|
||||||
$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping";
|
$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping";
|
||||||
$sql .= " WHERE doc_type = 'asset'";
|
$sql .= " WHERE doc_type = 'asset'";
|
||||||
$sql .= ")";
|
$sql .= ") ";
|
||||||
}
|
}*/
|
||||||
|
|
||||||
$sql .= "SELECT ad.fk_asset AS rowid, a.ref AS asset_ref, a.label AS asset_label, a.acquisition_value_ht AS asset_acquisition_value_ht";
|
$sql .= "SELECT ad.fk_asset AS rowid, a.ref AS asset_ref, a.label AS asset_label, a.acquisition_value_ht AS asset_acquisition_value_ht";
|
||||||
$sql .= ", a.disposal_date AS asset_disposal_date, a.disposal_amount_ht AS asset_disposal_amount_ht, a.disposal_subject_to_vat AS asset_disposal_subject_to_vat";
|
$sql .= ", a.disposal_date AS asset_disposal_date, a.disposal_amount_ht AS asset_disposal_amount_ht, a.disposal_subject_to_vat AS asset_disposal_subject_to_vat";
|
||||||
$sql .= ", ad.rowid AS depreciation_id, ad.depreciation_mode, ad.ref AS depreciation_ref, ad.depreciation_date, ad.depreciation_ht, ad.accountancy_code_debit, ad.accountancy_code_credit";
|
$sql .= ", ad.rowid AS depreciation_id, ad.depreciation_mode, ad.ref AS depreciation_ref, ad.depreciation_date, ad.depreciation_ht, ad.accountancy_code_debit, ad.accountancy_code_credit";
|
||||||
$sql .= " FROM " . MAIN_DB_PREFIX . "asset_depreciation as ad";
|
$sql .= " FROM " . MAIN_DB_PREFIX . "asset_depreciation as ad";
|
||||||
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "asset as a ON a.rowid = ad.fk_asset";
|
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "asset as a ON a.rowid = ad.fk_asset";
|
||||||
if ($in_bookkeeping == 'already' || $in_bookkeeping == 'notyet') {
|
// FIXME sql error with Mysql 5.7
|
||||||
|
/*if ($in_bookkeeping == 'already' || $in_bookkeeping == 'notyet') {
|
||||||
$sql .= " LEFT JOIN in_accounting_bookkeeping as iab ON iab.fk_docdet = ad.rowid";
|
$sql .= " LEFT JOIN in_accounting_bookkeeping as iab ON iab.fk_docdet = ad.rowid";
|
||||||
}
|
}*/
|
||||||
$sql .= " WHERE a.entity IN (" . getEntity('asset', 0) . ')'; // We don't share object for accountancy, we use source object sharing
|
$sql .= " WHERE a.entity IN (" . getEntity('asset', 0) . ')'; // We don't share object for accountancy, we use source object sharing
|
||||||
|
// Compatibility with Mysql 5.7
|
||||||
|
if ($in_bookkeeping == 'already') {
|
||||||
|
$sql .= " AND EXISTS (SELECT iab.fk_docdet FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping AS iab WHERE iab.fk_docdet = ad.rowid AND doc_type = 'asset')";
|
||||||
|
} elseif ($in_bookkeeping == 'notyet') {
|
||||||
|
$sql .= " AND NOT EXISTS (SELECT iab.fk_docdet FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping AS iab WHERE iab.fk_docdet = ad.rowid AND doc_type = 'asset')";
|
||||||
|
}
|
||||||
$sql .= " AND ad.ref != ''"; // not reversal lines
|
$sql .= " AND ad.ref != ''"; // not reversal lines
|
||||||
if ($date_start && $date_end) {
|
if ($date_start && $date_end) {
|
||||||
$sql .= " AND ad.depreciation_date >= '" . $this->db->idate($date_start) . "' AND ad.depreciation_date <= '" . $this->db->idate($date_end) . "'";
|
$sql .= " AND ad.depreciation_date >= '" . $this->db->idate($date_start) . "' AND ad.depreciation_date <= '" . $this->db->idate($date_end) . "'";
|
||||||
@ -470,9 +484,10 @@ class AccountingJournal extends CommonObject
|
|||||||
$sql .= " AND ad.depreciation_date >= '" . $this->db->idate($conf->global->ACCOUNTING_DATE_START_BINDING) . "'";
|
$sql .= " AND ad.depreciation_date >= '" . $this->db->idate($conf->global->ACCOUNTING_DATE_START_BINDING) . "'";
|
||||||
}
|
}
|
||||||
// Already in bookkeeping or not
|
// Already in bookkeeping or not
|
||||||
if ($in_bookkeeping == 'already' || $in_bookkeeping == 'notyet') {
|
// FIXME sql error with Mysql 5.7
|
||||||
|
/*if ($in_bookkeeping == 'already' || $in_bookkeeping == 'notyet') {
|
||||||
$sql .= " AND iab.fk_docdet IS" . ($in_bookkeeping == 'already' ? " NOT" : "") . " NULL";
|
$sql .= " AND iab.fk_docdet IS" . ($in_bookkeeping == 'already' ? " NOT" : "") . " NULL";
|
||||||
}
|
}*/
|
||||||
$sql .= " ORDER BY ad.depreciation_date";
|
$sql .= " ORDER BY ad.depreciation_date";
|
||||||
|
|
||||||
dol_syslog(__METHOD__, LOG_DEBUG);
|
dol_syslog(__METHOD__, LOG_DEBUG);
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/* Copyright (C) 2014-2017 Olivier Geffroy <jeff@jeffinfo.com>
|
/* Copyright (C) 2014-2017 Olivier Geffroy <jeff@jeffinfo.com>
|
||||||
* Copyright (C) 2015-2017 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
* Copyright (C) 2015-2022 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||||
* Copyright (C) 2015-2020 Florian Henry <florian.henry@open-concept.pro>
|
* Copyright (C) 2015-2020 Florian Henry <florian.henry@open-concept.pro>
|
||||||
* Copyright (C) 2018-2020 Frédéric France <frederic.france@netlogic.fr>
|
* Copyright (C) 2018-2020 Frédéric France <frederic.france@netlogic.fr>
|
||||||
*
|
*
|
||||||
@ -169,6 +169,16 @@ class BookKeeping extends CommonObject
|
|||||||
*/
|
*/
|
||||||
public $piece_num;
|
public $piece_num;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var integer|string date of movement validated & lock
|
||||||
|
*/
|
||||||
|
public $date_validation;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var integer|string date of movement who are noticed like exported
|
||||||
|
*/
|
||||||
|
public $date_export;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
|
* @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
|
||||||
*/
|
*/
|
||||||
@ -788,8 +798,7 @@ class BookKeeping extends CommonObject
|
|||||||
$this->piece_num = $obj->piece_num;
|
$this->piece_num = $obj->piece_num;
|
||||||
$this->date_creation = $this->db->jdate($obj->date_creation);
|
$this->date_creation = $this->db->jdate($obj->date_creation);
|
||||||
$this->date_export = $this->db->jdate($obj->date_export);
|
$this->date_export = $this->db->jdate($obj->date_export);
|
||||||
$this->date_validation = $this->db->jdate($obj->date_validated);
|
$this->date_validation = isset($obj->date_validated) ? $this->db->jdate($obj->date_validated) : '';
|
||||||
$this->date_validation = $this->db->jdate($obj->date_validation);
|
|
||||||
}
|
}
|
||||||
$this->db->free($resql);
|
$this->db->free($resql);
|
||||||
|
|
||||||
@ -901,7 +910,8 @@ class BookKeeping extends CommonObject
|
|||||||
}
|
}
|
||||||
// Affichage par compte comptable
|
// Affichage par compte comptable
|
||||||
if (!empty($option)) {
|
if (!empty($option)) {
|
||||||
$sql .= ' AND t.subledger_account IS NOT NULL';
|
$sql .= " AND t.subledger_account IS NOT NULL";
|
||||||
|
$sql .= " AND t.subledger_account <> ''";
|
||||||
$sortfield = 't.subledger_account'.($sortfield ? ','.$sortfield : '');
|
$sortfield = 't.subledger_account'.($sortfield ? ','.$sortfield : '');
|
||||||
$sortorder = 'ASC'.($sortfield ? ','.$sortfield : '');
|
$sortorder = 'ASC'.($sortfield ? ','.$sortfield : '');
|
||||||
} else {
|
} else {
|
||||||
@ -1129,7 +1139,6 @@ class BookKeeping extends CommonObject
|
|||||||
* @param int $offset offset limit
|
* @param int $offset offset limit
|
||||||
* @param array $filter filter array
|
* @param array $filter filter array
|
||||||
* @param string $filtermode filter mode (AND or OR)
|
* @param string $filtermode filter mode (AND or OR)
|
||||||
*
|
|
||||||
* @return int <0 if KO, >0 if OK
|
* @return int <0 if KO, >0 if OK
|
||||||
*/
|
*/
|
||||||
public function fetchAllBalance($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND')
|
public function fetchAllBalance($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND')
|
||||||
@ -1151,7 +1160,7 @@ class BookKeeping extends CommonObject
|
|||||||
foreach ($filter as $key => $value) {
|
foreach ($filter as $key => $value) {
|
||||||
if ($key == 't.doc_date') {
|
if ($key == 't.doc_date') {
|
||||||
$sqlwhere[] = $key." = '".$this->db->idate($value)."'";
|
$sqlwhere[] = $key." = '".$this->db->idate($value)."'";
|
||||||
} elseif ($key == 't.doc_date>=' || $key == 't.doc_date<=') {
|
} elseif ($key == 't.doc_date>=' || $key == 't.doc_date<=' || $key == 't.doc_date>' || $key == 't.doc_date<') {
|
||||||
$sqlwhere[] = $key."'".$this->db->idate($value)."'";
|
$sqlwhere[] = $key."'".$this->db->idate($value)."'";
|
||||||
} elseif ($key == 't.numero_compte>=' || $key == 't.numero_compte<=' || $key == 't.subledger_account>=' || $key == 't.subledger_account<=') {
|
} elseif ($key == 't.numero_compte>=' || $key == 't.numero_compte<=' || $key == 't.subledger_account>=' || $key == 't.subledger_account<=') {
|
||||||
$sqlwhere[] = $key."'".$this->db->escape($value)."'";
|
$sqlwhere[] = $key."'".$this->db->escape($value)."'";
|
||||||
@ -1667,7 +1676,9 @@ class BookKeeping extends CommonObject
|
|||||||
$this->doc_type = $obj->doc_type;
|
$this->doc_type = $obj->doc_type;
|
||||||
$this->date_creation = $this->db->jdate($obj->date_creation);
|
$this->date_creation = $this->db->jdate($obj->date_creation);
|
||||||
$this->date_modification = $this->db->jdate($obj->date_modification);
|
$this->date_modification = $this->db->jdate($obj->date_modification);
|
||||||
|
if ($mode != "_tmp") {
|
||||||
$this->date_export = $this->db->jdate($obj->date_export);
|
$this->date_export = $this->db->jdate($obj->date_export);
|
||||||
|
}
|
||||||
$this->date_validation = $this->db->jdate($obj->date_validation);
|
$this->date_validation = $this->db->jdate($obj->date_validation);
|
||||||
} else {
|
} else {
|
||||||
$this->error = "Error ".$this->db->lasterror();
|
$this->error = "Error ".$this->db->lasterror();
|
||||||
@ -1764,7 +1775,9 @@ class BookKeeping extends CommonObject
|
|||||||
$line->piece_num = $obj->piece_num;
|
$line->piece_num = $obj->piece_num;
|
||||||
$line->date_creation = $obj->date_creation;
|
$line->date_creation = $obj->date_creation;
|
||||||
$line->date_modification = $obj->date_modification;
|
$line->date_modification = $obj->date_modification;
|
||||||
|
if ($mode != "_tmp") {
|
||||||
$line->date_export = $obj->date_export;
|
$line->date_export = $obj->date_export;
|
||||||
|
}
|
||||||
$line->date_validation = $obj->date_validation;
|
$line->date_validation = $obj->date_validation;
|
||||||
|
|
||||||
$this->linesmvt[] = $line;
|
$this->linesmvt[] = $line;
|
||||||
|
|||||||
@ -33,11 +33,52 @@ include_once DOL_DOCUMENT_ROOT."/core/lib/date.lib.php";
|
|||||||
*/
|
*/
|
||||||
class Lettering extends BookKeeping
|
class Lettering extends BookKeeping
|
||||||
{
|
{
|
||||||
/**
|
public static $doc_type_infos = array(
|
||||||
* @var BookKeeping[] Bookkeeping cached
|
'customer_invoice' => array(
|
||||||
*/
|
'payment_table' => 'paiement',
|
||||||
public static $bookkeeping_cached = array();
|
'payment_table_fk_bank' => 'fk_bank',
|
||||||
|
'doc_payment_table' => 'paiement_facture',
|
||||||
|
'doc_payment_table_fk_payment' => 'fk_paiement',
|
||||||
|
'doc_payment_table_fk_doc' => 'fk_facture',
|
||||||
|
'linked_info' => array(
|
||||||
|
array(
|
||||||
|
'table' => 'paiement_facture',
|
||||||
|
'fk_doc' => 'fk_facture',
|
||||||
|
'fk_link' => 'fk_paiement',
|
||||||
|
'prefix' => 'p',
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'table' => 'societe_remise_except',
|
||||||
|
'fk_doc' => 'fk_facture_source',
|
||||||
|
'fk_link' => 'fk_facture',
|
||||||
|
'prefix' => 'a',
|
||||||
|
'is_fk_link_is_also_fk_doc' => true,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
'supplier_invoice' => array(
|
||||||
|
'payment_table' => 'paiementfourn',
|
||||||
|
'payment_table_fk_bank' => 'fk_bank',
|
||||||
|
'doc_payment_table' => 'paiementfourn_facturefourn',
|
||||||
|
'doc_payment_table_fk_payment' => 'fk_paiementfourn',
|
||||||
|
'doc_payment_table_fk_doc' => 'fk_facturefourn',
|
||||||
|
'linked_info' => array(
|
||||||
|
array(
|
||||||
|
'table' => 'paiementfourn_facturefourn',
|
||||||
|
'fk_doc' => 'fk_facturefourn',
|
||||||
|
'fk_link' => 'fk_paiementfourn',
|
||||||
|
'prefix' => 'p',
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'table' => 'societe_remise_except',
|
||||||
|
'fk_doc' => 'fk_invoice_supplier_source',
|
||||||
|
'fk_link' => 'fk_invoice_supplier',
|
||||||
|
'prefix' => 'a',
|
||||||
|
'is_fk_link_is_also_fk_doc' => true,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* letteringThirdparty
|
* letteringThirdparty
|
||||||
@ -250,18 +291,9 @@ class Lettering extends BookKeeping
|
|||||||
$lettre = 'AAA';
|
$lettre = 'AAA';
|
||||||
|
|
||||||
$sql = "SELECT DISTINCT ab2.lettering_code";
|
$sql = "SELECT DISTINCT ab2.lettering_code";
|
||||||
$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping As ab";
|
$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping AS ab";
|
||||||
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "bank_url AS bu ON bu.fk_bank = ab.fk_doc";
|
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_bookkeeping AS ab2 ON ab2.subledger_account = ab.subledger_account";
|
||||||
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "bank_url AS bu2 ON bu2.url_id = bu.url_id";
|
|
||||||
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_bookkeeping AS ab2 ON ab2.fk_doc = bu2.fk_bank";
|
|
||||||
$sql .= " WHERE ab.rowid IN (" . $this->db->sanitize(implode(',', $ids)) . ")";
|
$sql .= " WHERE ab.rowid IN (" . $this->db->sanitize(implode(',', $ids)) . ")";
|
||||||
$sql .= " AND ab.doc_type = 'bank'";
|
|
||||||
$sql .= " AND ab2.doc_type = 'bank'";
|
|
||||||
$sql .= " AND bu.type = 'company'";
|
|
||||||
$sql .= " AND bu2.type = 'company'";
|
|
||||||
$sql .= " AND ab.subledger_account != ''";
|
|
||||||
$sql .= " AND ab2.subledger_account != ''";
|
|
||||||
$sql .= " AND ab.lettering_code IS NULL";
|
|
||||||
$sql .= " AND ab2.lettering_code != ''";
|
$sql .= " AND ab2.lettering_code != ''";
|
||||||
$sql .= " ORDER BY ab2.lettering_code DESC";
|
$sql .= " ORDER BY ab2.lettering_code DESC";
|
||||||
$sql .= " LIMIT 1 ";
|
$sql .= " LIMIT 1 ";
|
||||||
@ -269,7 +301,7 @@ class Lettering extends BookKeeping
|
|||||||
$resqla = $this->db->query($sql);
|
$resqla = $this->db->query($sql);
|
||||||
if ($resqla) {
|
if ($resqla) {
|
||||||
$obj = $this->db->fetch_object($resqla);
|
$obj = $this->db->fetch_object($resqla);
|
||||||
$lettre = (empty($obj->lettering_code) ? 'AAA' : $obj->lettering_code);
|
$lettre = (empty($obj->lettering_code) ? $lettre : $obj->lettering_code);
|
||||||
if (!empty($obj->lettering_code)) {
|
if (!empty($obj->lettering_code)) {
|
||||||
$lettre++;
|
$lettre++;
|
||||||
}
|
}
|
||||||
@ -301,7 +333,7 @@ class Lettering extends BookKeeping
|
|||||||
if (!$error) {
|
if (!$error) {
|
||||||
$sql = "UPDATE ".MAIN_DB_PREFIX."accounting_bookkeeping SET";
|
$sql = "UPDATE ".MAIN_DB_PREFIX."accounting_bookkeeping SET";
|
||||||
$sql .= " lettering_code='".$this->db->escape($lettre)."'";
|
$sql .= " lettering_code='".$this->db->escape($lettre)."'";
|
||||||
$sql .= " , date_lettering = '".$this->db->idate($now)."'"; // todo correct date it's false
|
$sql .= ", date_lettering = '".$this->db->idate($now)."'"; // todo correct date it's false
|
||||||
$sql .= " WHERE rowid IN (".$this->db->sanitize(implode(',', $ids)).") AND lettering_code IS NULL AND subledger_account != ''";
|
$sql .= " WHERE rowid IN (".$this->db->sanitize(implode(',', $ids)).") AND lettering_code IS NULL AND subledger_account != ''";
|
||||||
|
|
||||||
dol_syslog(get_class($this)."::update", LOG_DEBUG);
|
dol_syslog(get_class($this)."::update", LOG_DEBUG);
|
||||||
@ -336,7 +368,7 @@ class Lettering extends BookKeeping
|
|||||||
|
|
||||||
$sql = "UPDATE ".MAIN_DB_PREFIX."accounting_bookkeeping SET";
|
$sql = "UPDATE ".MAIN_DB_PREFIX."accounting_bookkeeping SET";
|
||||||
$sql .= " lettering_code = NULL";
|
$sql .= " lettering_code = NULL";
|
||||||
$sql .= " , date_lettering = NULL";
|
$sql .= ", date_lettering = NULL";
|
||||||
$sql .= " WHERE rowid IN (".$this->db->sanitize(implode(',', $ids)).")";
|
$sql .= " WHERE rowid IN (".$this->db->sanitize(implode(',', $ids)).")";
|
||||||
$sql .= " AND subledger_account != ''";
|
$sql .= " AND subledger_account != ''";
|
||||||
|
|
||||||
@ -374,16 +406,7 @@ class Lettering extends BookKeeping
|
|||||||
$errors = array();
|
$errors = array();
|
||||||
$nb_lettering = 0;
|
$nb_lettering = 0;
|
||||||
|
|
||||||
$result = $this->bookkeepingLettering($bookkeeping_ids, 'customer_invoice', $unlettering);
|
$result = $this->bookkeepingLettering($bookkeeping_ids, $unlettering);
|
||||||
if ($result < 0) {
|
|
||||||
$error++;
|
|
||||||
$errors = array_merge($errors, $this->errors);
|
|
||||||
$nb_lettering += abs($result) - 2;
|
|
||||||
} else {
|
|
||||||
$nb_lettering += $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
$result = $this->bookkeepingLettering($bookkeeping_ids, 'supplier_invoice', $unlettering);
|
|
||||||
if ($result < 0) {
|
if ($result < 0) {
|
||||||
$error++;
|
$error++;
|
||||||
$errors = array_merge($errors, $this->errors);
|
$errors = array_merge($errors, $this->errors);
|
||||||
@ -404,11 +427,10 @@ class Lettering extends BookKeeping
|
|||||||
* Lettering bookkeeping lines
|
* Lettering bookkeeping lines
|
||||||
*
|
*
|
||||||
* @param array $bookkeeping_ids Lettering specific list of bookkeeping id
|
* @param array $bookkeeping_ids Lettering specific list of bookkeeping id
|
||||||
* @param string $type Type of bookkeeping type to lettering ('customer_invoice' or 'supplier_invoice')
|
|
||||||
* @param bool $unlettering Do unlettering
|
* @param bool $unlettering Do unlettering
|
||||||
* @return int <0 if error (nb lettered = result -1), 0 if noting to lettering, >0 if OK (nb lettered)
|
* @return int <0 if error (nb lettered = result -1), 0 if noting to lettering, >0 if OK (nb lettered)
|
||||||
*/
|
*/
|
||||||
public function bookkeepingLettering($bookkeeping_ids, $type = 'customer_invoice', $unlettering = false)
|
public function bookkeepingLettering($bookkeeping_ids, $unlettering = false)
|
||||||
{
|
{
|
||||||
global $langs;
|
global $langs;
|
||||||
|
|
||||||
@ -416,11 +438,14 @@ class Lettering extends BookKeeping
|
|||||||
|
|
||||||
// Clean parameters
|
// Clean parameters
|
||||||
$bookkeeping_ids = is_array($bookkeeping_ids) ? $bookkeeping_ids : array();
|
$bookkeeping_ids = is_array($bookkeeping_ids) ? $bookkeeping_ids : array();
|
||||||
$type = trim($type);
|
|
||||||
|
|
||||||
$error = 0;
|
$error = 0;
|
||||||
$nb_lettering = 0;
|
$nb_lettering = 0;
|
||||||
$grouped_lines = $this->getLinkedLines($bookkeeping_ids, $type);
|
$grouped_lines = $this->getLinkedLines($bookkeeping_ids);
|
||||||
|
if (!is_array($grouped_lines)) {
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
|
||||||
foreach ($grouped_lines as $lines) {
|
foreach ($grouped_lines as $lines) {
|
||||||
$group_error = 0;
|
$group_error = 0;
|
||||||
$total = 0;
|
$total = 0;
|
||||||
@ -479,51 +504,213 @@ class Lettering extends BookKeeping
|
|||||||
* Lettering bookkeeping lines
|
* Lettering bookkeeping lines
|
||||||
*
|
*
|
||||||
* @param array $bookkeeping_ids Lettering specific list of bookkeeping id
|
* @param array $bookkeeping_ids Lettering specific list of bookkeeping id
|
||||||
* @param string $type Type of bookkeeping type to lettering ('customer_invoice' or 'supplier_invoice')
|
* @param bool $only_has_subledger_account Get only lines who have subledger account
|
||||||
* @return array|int <0 if error otherwise all linked lines by block
|
* @return array|int <0 if error otherwise all linked lines by block
|
||||||
*/
|
*/
|
||||||
public function getLinkedLines($bookkeeping_ids, $type = 'customer_invoice')
|
public function getLinkedLines($bookkeeping_ids, $only_has_subledger_account = true)
|
||||||
{
|
{
|
||||||
global $conf, $langs;
|
global $conf, $langs;
|
||||||
$this->errors = array();
|
$this->errors = array();
|
||||||
|
|
||||||
// Clean parameters
|
// Clean parameters
|
||||||
$bookkeeping_ids = is_array($bookkeeping_ids) ? $bookkeeping_ids : array();
|
$bookkeeping_ids = is_array($bookkeeping_ids) ? $bookkeeping_ids : array();
|
||||||
$type = trim($type);
|
|
||||||
|
|
||||||
if ($type == 'customer_invoice') {
|
// Get all bookkeeping lines
|
||||||
$doc_type = 'customer_invoice';
|
$sql = "SELECT DISTINCT ab.doc_type, ab.fk_doc";
|
||||||
$bank_url_type = 'payment';
|
$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping AS ab";
|
||||||
$payment_element = 'paiement_facture';
|
$sql .= " WHERE ab.entity IN (" . getEntity('accountancy') . ")";
|
||||||
$fk_payment_element = 'fk_paiement';
|
$sql .= " AND ab.fk_doc > 0";
|
||||||
$fk_element = 'fk_facture';
|
if (!empty($bookkeeping_ids)) {
|
||||||
$account_number = $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER;
|
// Get all bookkeeping lines of piece number
|
||||||
} elseif ($type == 'supplier_invoice') {
|
$sql .= " AND EXISTS (";
|
||||||
$doc_type = 'supplier_invoice';
|
$sql .= " SELECT rowid";
|
||||||
$bank_url_type = 'payment_supplier';
|
$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping AS pn";
|
||||||
$payment_element = 'paiementfourn_facturefourn';
|
$sql .= " WHERE pn.entity IN (" . getEntity('accountancy') . ")";
|
||||||
$fk_payment_element = 'fk_paiementfourn';
|
$sql .= " AND pn.rowid IN (" . $this->db->sanitize(implode(',', $bookkeeping_ids)) . ")";
|
||||||
$fk_element = 'fk_facturefourn';
|
$sql .= " AND pn.piece_num = ab.piece_num";
|
||||||
$account_number = $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER;
|
$sql .= " )";
|
||||||
} else {
|
}
|
||||||
|
if ($only_has_subledger_account) $sql .= " AND ab.subledger_account != ''";
|
||||||
|
|
||||||
|
dol_syslog(__METHOD__ . " - Get all bookkeeping lines", LOG_DEBUG);
|
||||||
|
$resql = $this->db->query($sql);
|
||||||
|
if (!$resql) {
|
||||||
|
$this->errors[] = "Error " . $this->db->lasterror();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$bookkeeping_lines_by_type = array();
|
||||||
|
while ($obj = $this->db->fetch_object($resql)) {
|
||||||
|
$bookkeeping_lines_by_type[$obj->doc_type][$obj->fk_doc] = $obj->fk_doc;
|
||||||
|
}
|
||||||
|
$this->db->free($resql);
|
||||||
|
|
||||||
|
if (empty($bookkeeping_lines_by_type)) {
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($bookkeeping_lines_by_type['bank'])) {
|
||||||
|
$new_bookkeeping_lines_by_type = $this->getDocTypeAndFkDocFromBankLines($bookkeeping_lines_by_type['bank']);
|
||||||
|
if (!is_array($new_bookkeeping_lines_by_type)) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
foreach ($new_bookkeeping_lines_by_type as $doc_type => $fk_docs) {
|
||||||
|
foreach ($fk_docs as $fk_doc) {
|
||||||
|
$bookkeeping_lines_by_type[$doc_type][$fk_doc] = $fk_doc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$grouped_lines = array();
|
||||||
|
foreach (self::$doc_type_infos as $doc_type => $doc_type_info) {
|
||||||
|
if (!is_array($bookkeeping_lines_by_type[$doc_type])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get all document ids grouped
|
||||||
|
$doc_grouped = $this->getLinkedDocumentByGroup($bookkeeping_lines_by_type[$doc_type], $doc_type);
|
||||||
|
if (!is_array($doc_grouped)) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Group all lines by document/piece number
|
||||||
|
foreach ($doc_grouped as $doc_ids) {
|
||||||
|
$bank_ids = $this->getBankLinesFromFkDocAndDocType($doc_ids, $doc_type);
|
||||||
|
if (!is_array($bank_ids)) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get all bookkeeping lines linked
|
||||||
|
$sql = "SELECT DISTINCT ab.rowid, ab.piece_num, ab.debit, ab.credit, ab.lettering_code";
|
||||||
|
$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping AS ab";
|
||||||
|
$sql .= " WHERE ab.entity IN (" . getEntity('accountancy') . ")";
|
||||||
|
$sql .= " AND (";
|
||||||
|
if (!empty($bank_ids)) {
|
||||||
|
$sql .= " EXISTS (";
|
||||||
|
$sql .= " SELECT bpn.rowid";
|
||||||
|
$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping AS bpn";
|
||||||
|
$sql .= " WHERE bpn.entity IN (" . getEntity('accountancy') . ")";
|
||||||
|
$sql .= " AND bpn.doc_type = 'bank'";
|
||||||
|
$sql .= " AND bpn.fk_doc IN (" . $this->db->sanitize(implode(',', $bank_ids)) . ")";
|
||||||
|
$sql .= " AND bpn ON bpn.piece_num = ab.piece_num";
|
||||||
|
$sql .= " ) OR ";
|
||||||
|
}
|
||||||
|
$sql .= " EXISTS (";
|
||||||
|
$sql .= " SELECT dpn.rowid";
|
||||||
|
$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping AS dpn";
|
||||||
|
$sql .= " WHERE dpn.entity IN (" . getEntity('accountancy') . ")";
|
||||||
|
$sql .= " AND dpn.doc_type = '" . $this->db->escape($doc_type) . "'";
|
||||||
|
$sql .= " AND dpn.fk_doc IN (" . $this->db->sanitize(implode(',', $doc_ids)) . ")";
|
||||||
|
$sql .= " AND dpn.piece_num = ab.piece_num";
|
||||||
|
$sql .= " )";
|
||||||
|
$sql .= ")";
|
||||||
|
if ($only_has_subledger_account) $sql .= " AND ab.subledger_account != ''";
|
||||||
|
|
||||||
|
dol_syslog(__METHOD__ . " - Get all bookkeeping lines linked", LOG_DEBUG);
|
||||||
|
$resql = $this->db->query($sql);
|
||||||
|
if (!$resql) {
|
||||||
|
$this->errors[] = "Error " . $this->db->lasterror();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$group = array();
|
||||||
|
while ($obj = $this->db->fetch_object($resql)) {
|
||||||
|
$group[$obj->rowid] = array(
|
||||||
|
'id' => $obj->rowid,
|
||||||
|
'piece_num' => $obj->piece_num,
|
||||||
|
'debit' => $obj->debit,
|
||||||
|
'credit' => $obj->credit,
|
||||||
|
'lettering_code' => $obj->lettering_code,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
$this->db->free($resql);
|
||||||
|
|
||||||
|
if (!empty($group)) $grouped_lines[] = $group;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $grouped_lines;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all fk_doc by doc_type from list of bank ids
|
||||||
|
*
|
||||||
|
* @param array $bank_ids List of bank ids
|
||||||
|
* @return array|int <0 if error otherwise all fk_doc by doc_type
|
||||||
|
*/
|
||||||
|
public function getDocTypeAndFkDocFromBankLines($bank_ids)
|
||||||
|
{
|
||||||
|
dol_syslog(__METHOD__ . " - bank_ids=".json_encode($bank_ids), LOG_DEBUG);
|
||||||
|
|
||||||
|
// Clean parameters
|
||||||
|
$bank_ids = is_array($bank_ids) ? $bank_ids : array();
|
||||||
|
|
||||||
|
if (empty($bank_ids)) {
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
|
||||||
|
$bookkeeping_lines_by_type = array();
|
||||||
|
foreach (self::$doc_type_infos as $doc_type => $doc_type_info) {
|
||||||
|
// Get all fk_doc by doc_type from bank ids
|
||||||
|
$sql = "SELECT DISTINCT dp." . $doc_type_info['doc_payment_table_fk_doc'] . " AS fk_doc";
|
||||||
|
$sql .= " FROM " . MAIN_DB_PREFIX . $doc_type_info['payment_table'] . " AS p";
|
||||||
|
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . $doc_type_info['doc_payment_table'] . " AS dp ON dp." . $doc_type_info['doc_payment_table_fk_payment'] . " = p.rowid";
|
||||||
|
$sql .= " WHERE p." . $doc_type_info['payment_table_fk_bank'] . " IN (" . $this->db->sanitize(implode(',', $bank_ids)) . ")";
|
||||||
|
$sql .= " AND dp." . $doc_type_info['doc_payment_table_fk_doc'] . " > 0";
|
||||||
|
|
||||||
|
dol_syslog(__METHOD__ . " - Get all fk_doc by doc_type from list of bank ids for '" . $doc_type . "'", LOG_DEBUG);
|
||||||
|
$resql = $this->db->query($sql);
|
||||||
|
if (!$resql) {
|
||||||
|
$this->errors[] = "Error " . $this->db->lasterror();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
while ($obj = $this->db->fetch_object($resql)) {
|
||||||
|
$bookkeeping_lines_by_type[$doc_type][$obj->fk_doc] = $obj->fk_doc;
|
||||||
|
}
|
||||||
|
$this->db->free($resql);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $bookkeeping_lines_by_type;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all bank ids from list of document ids of a type
|
||||||
|
*
|
||||||
|
* @param array $document_ids List of document id
|
||||||
|
* @param string $doc_type Type of document ('customer_invoice' or 'supplier_invoice', ...)
|
||||||
|
* @return array|int <0 if error otherwise all all bank ids from list of document ids of a type
|
||||||
|
*/
|
||||||
|
public function getBankLinesFromFkDocAndDocType($document_ids, $doc_type)
|
||||||
|
{
|
||||||
|
global $langs;
|
||||||
|
|
||||||
|
dol_syslog(__METHOD__ . " - bank_ids=".json_encode($document_ids) . ", doc_type=$doc_type", LOG_DEBUG);
|
||||||
|
|
||||||
|
// Clean parameters
|
||||||
|
$document_ids = is_array($document_ids) ? $document_ids : array();
|
||||||
|
$doc_type = trim($doc_type);
|
||||||
|
|
||||||
|
if (empty($document_ids)) {
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
if (!is_array(self::$doc_type_infos[$doc_type])) {
|
||||||
$langs->load('errors');
|
$langs->load('errors');
|
||||||
$this->errors[] = $langs->trans('ErrorBadParameters');
|
$this->errors[] = $langs->trans('ErrorBadParameters');
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
$payment_ids = array();
|
$doc_type_info = self::$doc_type_infos[$doc_type];
|
||||||
|
$bank_ids = array();
|
||||||
|
|
||||||
// Get all payment id from bank lines
|
// Get all fk_doc by doc_type from bank ids
|
||||||
$sql = "SELECT DISTINCT bu.url_id AS payment_id";
|
$sql = "SELECT DISTINCT p." . $doc_type_info['payment_table_fk_bank'] . " AS fk_doc";
|
||||||
$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping AS ab";
|
$sql .= " FROM " . MAIN_DB_PREFIX . $doc_type_info['payment_table'] . " AS p";
|
||||||
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "bank_url AS bu ON bu.fk_bank = ab.fk_doc";
|
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . $doc_type_info['doc_payment_table'] . " AS dp ON dp." . $doc_type_info['doc_payment_table_fk_payment'] . " = p.rowid";
|
||||||
$sql .= " WHERE ab.doc_type = 'bank'";
|
$sql .= " WHERE dp." . $doc_type_info['doc_payment_table_fk_doc'] . " IN (" . $this->db->sanitize(implode(',', $document_ids)) . ")";
|
||||||
// $sql .= " AND ab.subledger_account != ''";
|
$sql .= " AND p." . $doc_type_info['payment_table_fk_bank'] . " > 0";
|
||||||
// $sql .= " AND ab.numero_compte = '" . $this->db->escape($account_number) . "'";
|
|
||||||
$sql .= " AND bu.type = '" . $this->db->escape($bank_url_type) . "'";
|
|
||||||
if (!empty($bookkeeping_ids)) $sql .= " AND ab.rowid IN (" . $this->db->sanitize(implode(',', $bookkeeping_ids)) . ")";
|
|
||||||
|
|
||||||
dol_syslog(__METHOD__ . " - Get all payment id from bank lines", LOG_DEBUG);
|
dol_syslog(__METHOD__ . " - Get all bank ids from list of document ids of a type '" . $doc_type . "'", LOG_DEBUG);
|
||||||
$resql = $this->db->query($sql);
|
$resql = $this->db->query($sql);
|
||||||
if (!$resql) {
|
if (!$resql) {
|
||||||
$this->errors[] = "Error " . $this->db->lasterror();
|
$this->errors[] = "Error " . $this->db->lasterror();
|
||||||
@ -531,218 +718,137 @@ class Lettering extends BookKeeping
|
|||||||
}
|
}
|
||||||
|
|
||||||
while ($obj = $this->db->fetch_object($resql)) {
|
while ($obj = $this->db->fetch_object($resql)) {
|
||||||
$payment_ids[$obj->payment_id] = $obj->payment_id;
|
$bank_ids[$obj->fk_doc] = $obj->fk_doc;
|
||||||
}
|
}
|
||||||
$this->db->free($resql);
|
$this->db->free($resql);
|
||||||
|
|
||||||
// Get all payment id from payment lines
|
return $bank_ids;
|
||||||
$sql = "SELECT DISTINCT pe.$fk_payment_element AS payment_id";
|
|
||||||
$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_bookkeeping AS ab";
|
|
||||||
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "$payment_element AS pe ON pe.$fk_element = ab.fk_doc";
|
|
||||||
$sql .= " WHERE ab.doc_type = '" . $this->db->escape($doc_type) . "'";
|
|
||||||
// $sql .= " AND ab.subledger_account != ''";
|
|
||||||
// $sql .= " AND ab.numero_compte = '" . $this->db->escape($account_number) . "'";
|
|
||||||
$sql .= " AND pe.$fk_payment_element IS NOT NULL";
|
|
||||||
if (!empty($bookkeeping_ids)) $sql .= " AND ab.rowid IN (" . $this->db->sanitize(implode(',', $bookkeeping_ids)) . ")";
|
|
||||||
|
|
||||||
dol_syslog(__METHOD__ . " - Get all payment id from bank lines", LOG_DEBUG);
|
|
||||||
$resql = $this->db->query($sql);
|
|
||||||
if (!$resql) {
|
|
||||||
$this->errors[] = "Error " . $this->db->lasterror();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
while ($obj = $this->db->fetch_object($resql)) {
|
|
||||||
$payment_ids[$obj->payment_id] = $obj->payment_id;
|
|
||||||
}
|
|
||||||
$this->db->free($resql);
|
|
||||||
|
|
||||||
if (empty($payment_ids)) {
|
|
||||||
return array();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get all payments linked by group
|
|
||||||
$payment_by_group = $this->getLinkedPaymentByGroup($payment_ids, $type);
|
|
||||||
|
|
||||||
$groups = array();
|
|
||||||
foreach ($payment_by_group as $payment_list) {
|
|
||||||
$lines = array();
|
|
||||||
|
|
||||||
// Get bank lines
|
|
||||||
$sql = "SELECT DISTINCT ab.rowid, ab.piece_num, ab.lettering_code, ab.debit, ab.credit";
|
|
||||||
$sql .= " FROM " . MAIN_DB_PREFIX . "bank_url AS bu";
|
|
||||||
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_bookkeeping AS ab ON ab.fk_doc = bu.fk_bank";
|
|
||||||
$sql .= " WHERE bu.url_id IN (" . $this->db->sanitize(implode(',', $payment_list)) . ")";
|
|
||||||
$sql .= " AND bu.type = '" . $this->db->escape($bank_url_type) . "'";
|
|
||||||
$sql .= " AND ab.doc_type = 'bank'";
|
|
||||||
$sql .= " AND ab.subledger_account != ''";
|
|
||||||
$sql .= " AND ab.numero_compte = '" . $this->db->escape($account_number) . "'";
|
|
||||||
|
|
||||||
dol_syslog(__METHOD__ . " - Get bank lines", LOG_DEBUG);
|
|
||||||
$resql = $this->db->query($sql);
|
|
||||||
if (!$resql) {
|
|
||||||
$this->errors[] = "Error " . $this->db->lasterror();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
while ($obj = $this->db->fetch_object($resql)) {
|
|
||||||
$lines[$obj->rowid] = array('id' => $obj->rowid, 'piece_num' => $obj->piece_num, 'lettering_code' => $obj->lettering_code, 'debit' => $obj->debit, 'credit' => $obj->credit);
|
|
||||||
}
|
|
||||||
$this->db->free($resql);
|
|
||||||
|
|
||||||
// Get payment lines
|
|
||||||
$sql = "SELECT DISTINCT ab.rowid, ab.piece_num, ab.lettering_code, ab.debit, ab.credit";
|
|
||||||
$sql .= " FROM " . MAIN_DB_PREFIX . "$payment_element AS pe";
|
|
||||||
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "accounting_bookkeeping AS ab ON ab.fk_doc = pe.$fk_element";
|
|
||||||
$sql .= " WHERE pe.$fk_payment_element IN (" . $this->db->sanitize(implode(',', $payment_list)) . ")";
|
|
||||||
$sql .= " AND ab.doc_type = '" . $this->db->escape($doc_type) . "'";
|
|
||||||
$sql .= " AND ab.subledger_account != ''";
|
|
||||||
$sql .= " AND ab.numero_compte = '" . $this->db->escape($account_number) . "'";
|
|
||||||
|
|
||||||
dol_syslog(__METHOD__ . " - Get payment lines", LOG_DEBUG);
|
|
||||||
$resql = $this->db->query($sql);
|
|
||||||
if (!$resql) {
|
|
||||||
$this->errors[] = "Error " . $this->db->lasterror();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
while ($obj = $this->db->fetch_object($resql)) {
|
|
||||||
$lines[$obj->rowid] = array('id' => $obj->rowid, 'piece_num' => $obj->piece_num, 'lettering_code' => $obj->lettering_code, 'debit' => $obj->debit, 'credit' => $obj->credit);
|
|
||||||
}
|
|
||||||
$this->db->free($resql);
|
|
||||||
|
|
||||||
if (!empty($lines)) {
|
|
||||||
$groups[] = $lines;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $groups;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Linked payment by group
|
* Get all linked document ids by group and type
|
||||||
*
|
*
|
||||||
* @param array $payment_ids list of payment id
|
* @param array $document_ids List of document id
|
||||||
* @param string $type Type of bookkeeping type to lettering ('customer_invoice' or 'supplier_invoice')
|
* @param string $doc_type Type of document ('customer_invoice' or 'supplier_invoice', ...)
|
||||||
* @return array|int <0 if error otherwise all linked lines by block
|
* @return array|int <0 if error otherwise all linked document ids by group and type [ [ 'doc_type' => [ doc_id, ... ], ... ], ... ]
|
||||||
*/
|
*/
|
||||||
public function getLinkedPaymentByGroup($payment_ids, $type)
|
public function getLinkedDocumentByGroup($document_ids, $doc_type)
|
||||||
{
|
{
|
||||||
global $langs;
|
global $langs;
|
||||||
|
|
||||||
// Clean parameters
|
// Clean parameters
|
||||||
$payment_ids = is_array($payment_ids) ? $payment_ids : array();
|
$document_ids = is_array($document_ids) ? $document_ids : array();
|
||||||
$type = trim($type);
|
$doc_type = trim($doc_type);
|
||||||
|
|
||||||
if (empty($payment_ids)) {
|
if (empty($document_ids)) {
|
||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
|
if (!is_array(self::$doc_type_infos[$doc_type])) {
|
||||||
if ($type == 'customer_invoice') {
|
|
||||||
$payment_element = 'paiement_facture';
|
|
||||||
$fk_payment_element = 'fk_paiement';
|
|
||||||
$fk_element = 'fk_facture';
|
|
||||||
} elseif ($type == 'supplier_invoice') {
|
|
||||||
$payment_element = 'paiementfourn_facturefourn';
|
|
||||||
$fk_payment_element = 'fk_paiementfourn';
|
|
||||||
$fk_element = 'fk_facturefourn';
|
|
||||||
} else {
|
|
||||||
$langs->load('errors');
|
$langs->load('errors');
|
||||||
$this->errors[] = $langs->trans('ErrorBadParameters');
|
$this->errors[] = $langs->trans('ErrorBadParameters');
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get payment lines
|
$doc_type_info = self::$doc_type_infos[$doc_type];
|
||||||
$sql = "SELECT DISTINCT pe2.$fk_payment_element, pe2.$fk_element";
|
|
||||||
$sql .= " FROM " . MAIN_DB_PREFIX . "$payment_element AS pe";
|
|
||||||
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "$payment_element AS pe2 ON pe2.$fk_element = pe.$fk_element";
|
|
||||||
$sql .= " WHERE pe.$fk_payment_element IN (" . $this->db->sanitize(implode(',', $payment_ids)) . ")";
|
|
||||||
|
|
||||||
dol_syslog(__METHOD__ . " - Get payment lines", LOG_DEBUG);
|
// Get document lines
|
||||||
|
$current_document_ids = array();
|
||||||
|
$link_by_element = array();
|
||||||
|
$element_by_link = array();
|
||||||
|
foreach ($doc_type_info['linked_info'] as $linked_info) {
|
||||||
|
$sql = "SELECT DISTINCT tl2." . $linked_info['fk_link'] . " AS fk_link, tl2." . $linked_info['fk_doc'] . " AS fk_doc";
|
||||||
|
$sql .= " FROM " . MAIN_DB_PREFIX . $linked_info['table'] . " AS tl";
|
||||||
|
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . $linked_info['table'] . " AS tl2 ON tl2." . $linked_info['fk_link'] . " = tl." . $linked_info['fk_link'];
|
||||||
|
$sql .= " WHERE tl." . $linked_info['fk_doc'] . " IN (" . $this->db->sanitize(implode(',', $document_ids)) . ")";
|
||||||
|
|
||||||
|
dol_syslog(__METHOD__ . " - Get document lines", LOG_DEBUG);
|
||||||
$resql = $this->db->query($sql);
|
$resql = $this->db->query($sql);
|
||||||
if (!$resql) {
|
if (!$resql) {
|
||||||
$this->errors[] = "Error " . $this->db->lasterror();
|
$this->errors[] = "Error " . $this->db->lasterror();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
$current_payment_ids = array();
|
$is_fk_link_is_also_fk_doc = !empty($linked_info['is_fk_link_is_also_fk_doc']);
|
||||||
$payment_by_element = array();
|
|
||||||
$element_by_payment = array();
|
|
||||||
while ($obj = $this->db->fetch_object($resql)) {
|
while ($obj = $this->db->fetch_object($resql)) {
|
||||||
$current_payment_ids[$obj->$fk_payment_element] = $obj->$fk_payment_element;
|
$current_document_ids[$obj->fk_doc] = $obj->fk_doc;
|
||||||
$element_by_payment[$obj->$fk_payment_element][$obj->$fk_element] = $obj->$fk_element;
|
|
||||||
$payment_by_element[$obj->$fk_element][$obj->$fk_payment_element] = $obj->$fk_payment_element;
|
$link_key = $linked_info['prefix'] . $obj->fk_link;
|
||||||
|
$element_by_link[$link_key][$obj->fk_doc] = $obj->fk_doc;
|
||||||
|
$link_by_element[$obj->fk_doc][$link_key] = $link_key;
|
||||||
|
if ($is_fk_link_is_also_fk_doc) {
|
||||||
|
$element_by_link[$link_key][$obj->fk_link] = $obj->fk_link;
|
||||||
|
$link_by_element[$obj->fk_link][$link_key] = $link_key;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$this->db->free($resql);
|
$this->db->free($resql);
|
||||||
|
|
||||||
if (count(array_diff($payment_ids, $current_payment_ids))) {
|
|
||||||
return $this->getLinkedPaymentByGroup($current_payment_ids, $type);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->getGroupElements($payment_by_element, $element_by_payment);
|
if (count(array_diff($document_ids, $current_document_ids))) {
|
||||||
|
return $this->getLinkedDocumentByGroup($current_document_ids, $doc_type);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->getGroupElements($link_by_element, $element_by_link);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get payment ids grouped by payment id and element id in common
|
* Get element ids grouped by link or element in common
|
||||||
*
|
*
|
||||||
* @param array $payment_by_element List of payment ids by element id
|
* @param array $link_by_element List of payment ids by link key
|
||||||
* @param array $element_by_payment List of element ids by payment id
|
* @param array $element_by_link List of element ids by link key
|
||||||
* @param int $element_id Element Id (used for recursive function)
|
* @param string $link_key Link key (used for recursive function)
|
||||||
* @param array $current_group Current group (used for recursive function)
|
* @param array $current_group Current group (used for recursive function)
|
||||||
* @return array List of payment ids grouped by payment id and element id in common
|
* @return array List of element ids grouped by link or element in common
|
||||||
*/
|
*/
|
||||||
public function getGroupElements(&$payment_by_element, &$element_by_payment, $element_id = 0, &$current_group = array())
|
public function getGroupElements(&$link_by_element, &$element_by_link, $link_key = '', &$current_group = array())
|
||||||
{
|
{
|
||||||
$grouped_payments = array();
|
$grouped_elements = array();
|
||||||
if ($element_id > 0 && !isset($payment_by_element[$element_id])) {
|
if (!empty($link_key) && !isset($element_by_link[$link_key])) {
|
||||||
// Return if specific element id not found
|
// Return if specific link key not found
|
||||||
return $grouped_payments;
|
return $grouped_elements;
|
||||||
}
|
}
|
||||||
|
|
||||||
$save_payment_by_element = null;
|
if (empty($link_key)) {
|
||||||
$save_element_by_payment = null;
|
|
||||||
if ($element_id == 0) {
|
|
||||||
// Save list when is the begin of recursive function
|
// Save list when is the begin of recursive function
|
||||||
$save_payment_by_element = $payment_by_element;
|
$save_link_by_element = $link_by_element;
|
||||||
$save_element_by_payment = $element_by_payment;
|
$save_element_by_link = $element_by_link;
|
||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
// Get current element id, get this payment id list and delete the entry
|
// Get current element id, get this payment id list and delete the entry
|
||||||
$current_element_id = $element_id > 0 ? $element_id : array_keys($payment_by_element)[0];
|
$current_link_key = !empty($link_key) ? $link_key : array_keys($element_by_link)[0];
|
||||||
$payment_ids = $payment_by_element[$current_element_id];
|
$element_ids = $element_by_link[$current_link_key];
|
||||||
unset($payment_by_element[$current_element_id]);
|
unset($element_by_link[$current_link_key]);
|
||||||
|
|
||||||
foreach ($payment_ids as $payment_id) {
|
foreach ($element_ids as $element_id) {
|
||||||
// Continue if payment id in not found
|
// Continue if element id in not found
|
||||||
if (!isset($element_by_payment[$payment_id])) continue;
|
if (!isset($link_by_element[$element_id])) continue;
|
||||||
|
|
||||||
// Set the payment in the current group
|
// Set the element in the current group
|
||||||
$current_group[$payment_id] = $payment_id;
|
$current_group[$element_id] = $element_id;
|
||||||
|
|
||||||
// Get current element ids, get this payment id list and delete the entry
|
// Get current link keys, get this element id list and delete the entry
|
||||||
$element_ids = $element_by_payment[$payment_id];
|
$link_keys = $link_by_element[$element_id];
|
||||||
unset($element_by_payment[$payment_id]);
|
unset($link_by_element[$element_id]);
|
||||||
|
|
||||||
// Set payment id on the current group for each element id of the payment
|
// Set element id on the current group for each link key of the element
|
||||||
foreach ($element_ids as $id) {
|
foreach ($link_keys as $key) {
|
||||||
$this->getGroupElements($payment_by_element, $element_by_payment, $id, $current_group);
|
$this->getGroupElements($link_by_element, $element_by_link, $key, $current_group);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($element_id == 0) {
|
if (empty($link_key)) {
|
||||||
// Save current group and reset the current group when is the begin of recursive function
|
// Save current group and reset the current group when is the begin of recursive function
|
||||||
$grouped_payments[] = $current_group;
|
$grouped_elements[] = $current_group;
|
||||||
$current_group = array();
|
$current_group = array();
|
||||||
}
|
}
|
||||||
} while (!empty($payment_by_element) && $element_id == 0);
|
} while (!empty($element_by_link) && empty($link_key));
|
||||||
|
|
||||||
if ($element_id == 0) {
|
if (empty($link_key)) {
|
||||||
// Restore list when is the begin of recursive function
|
// Restore list when is the begin of recursive function
|
||||||
$payment_by_element = $save_payment_by_element;
|
$link_by_element = $save_link_by_element;
|
||||||
$element_by_payment = $save_element_by_payment;
|
$element_by_link = $save_element_by_link;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $grouped_payments;
|
return $grouped_elements;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,6 +21,7 @@
|
|||||||
* \brief Home closure page
|
* \brief Home closure page
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
||||||
@ -63,7 +64,7 @@ if (!isModEnabled('accounting')) {
|
|||||||
if ($user->socid > 0) {
|
if ($user->socid > 0) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
if (empty($user->rights->accounting->fiscalyear->write)) {
|
if (!$user->hasRight('accounting', 'fiscalyear', 'write')) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -44,7 +44,7 @@ if (!isModEnabled('accounting')) {
|
|||||||
if ($user->socid > 0) {
|
if ($user->socid > 0) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
if (empty($user->rights->accounting->mouvements->lire)) {
|
if (!$user->hasRight('accounting', 'mouvements', 'lire')) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,7 +54,7 @@ if (empty($user->rights->accounting->mouvements->lire)) {
|
|||||||
* Actions
|
* Actions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if ($action == 'ventil' && $user->rights->accounting->bind->write) {
|
if ($action == 'ventil' && $user->hasRight('accounting', 'bind', 'write')) {
|
||||||
if (!$cancel) {
|
if (!$cancel) {
|
||||||
if ($codeventil < 0) {
|
if ($codeventil < 0) {
|
||||||
$codeventil = 0;
|
$codeventil = 0;
|
||||||
|
|||||||
@ -26,6 +26,7 @@
|
|||||||
* \brief Home customer journalization page
|
* \brief Home customer journalization page
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
||||||
@ -46,7 +47,7 @@ if (!isModEnabled('accounting')) {
|
|||||||
if ($user->socid > 0) {
|
if ($user->socid > 0) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
if (empty($user->rights->accounting->bind->write)) {
|
if (!$user->hasRight('accounting', 'bind', 'write')) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,7 +84,7 @@ if (!isModEnabled('accounting')) {
|
|||||||
if ($user->socid > 0) {
|
if ($user->socid > 0) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
if (empty($user->rights->accounting->mouvements->lire)) {
|
if (!$user->hasRight('accounting', 'mouvements', 'lire')) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,7 +93,7 @@ if (empty($user->rights->accounting->mouvements->lire)) {
|
|||||||
* Actions
|
* Actions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (($action == 'clean' || $action == 'validatehistory') && $user->rights->accounting->bind->write) {
|
if (($action == 'clean' || $action == 'validatehistory') && $user->hasRight('accounting', 'bind', 'write')) {
|
||||||
// Clean database by removing binding done on non existing or no more existing accounts
|
// Clean database by removing binding done on non existing or no more existing accounts
|
||||||
$db->begin();
|
$db->begin();
|
||||||
$sql1 = "UPDATE ".MAIN_DB_PREFIX."facturedet as fd";
|
$sql1 = "UPDATE ".MAIN_DB_PREFIX."facturedet as fd";
|
||||||
|
|||||||
@ -91,7 +91,7 @@ if (!isModEnabled('accounting')) {
|
|||||||
if ($user->socid > 0) {
|
if ($user->socid > 0) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
if (empty($user->rights->accounting->mouvements->lire)) {
|
if (!$user->hasRight('accounting', 'mouvements', 'lire')) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,7 +126,7 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x'
|
|||||||
$search_tvaintra = '';
|
$search_tvaintra = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_array($changeaccount) && count($changeaccount) > 0 && $user->rights->accounting->bind->write) {
|
if (is_array($changeaccount) && count($changeaccount) > 0 && $user->hasRight('accounting', 'bind', 'write')) {
|
||||||
$error = 0;
|
$error = 0;
|
||||||
|
|
||||||
if (!(GETPOST('account_parent', 'int') >= 0)) {
|
if (!(GETPOST('account_parent', 'int') >= 0)) {
|
||||||
|
|||||||
@ -110,7 +110,7 @@ if (!isModEnabled('accounting')) {
|
|||||||
if ($user->socid > 0) {
|
if ($user->socid > 0) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
if (empty($user->rights->accounting->mouvements->lire)) {
|
if (!$user->hasRight('accounting', 'mouvements', 'lire')) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -725,7 +725,7 @@ if ($result) {
|
|||||||
|
|
||||||
// Suggested accounting account
|
// Suggested accounting account
|
||||||
print '<td>';
|
print '<td>';
|
||||||
print $formaccounting->select_account(($default_account > 0 && $confirm === 'yes' && in_array($objp->rowid."_".$i, $toselect)) ? $default_account : $suggestedid, 'codeventil'.$facture_static_det->id, 1, array(), 0, 0, 'codeventil maxwidth200 maxwidthonsmartphone', 'cachewithshowemptyone');
|
print $formaccounting->select_account(($default_account > 0 && $confirm === 'yes' && in_array($objp->rowid."_".$i, $toselect)) ? $default_account : $suggestedid, 'codeventil'.$facture_static_det->id, 1, array(), 0, 0, 'codeventil maxwidth150 maxwidthonsmartphone', 'cachewithshowemptyone');
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
// Column with checkbox
|
// Column with checkbox
|
||||||
|
|||||||
@ -24,6 +24,7 @@
|
|||||||
* \brief Home expense report ventilation
|
* \brief Home expense report ventilation
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
||||||
|
|||||||
@ -417,7 +417,7 @@ if ($result) {
|
|||||||
print '<td class="center">'.vatrate($objp->tva_tx.($objp->vat_src_code ? ' ('.$objp->vat_src_code.')' : '')).'</td>';
|
print '<td class="center">'.vatrate($objp->tva_tx.($objp->vat_src_code ? ' ('.$objp->vat_src_code.')' : '')).'</td>';
|
||||||
|
|
||||||
// Accounting account affected
|
// Accounting account affected
|
||||||
print '<td class="center">';
|
print '<td>';
|
||||||
print $accountingaccountstatic->getNomUrl(0, 1, 1, '', 1);
|
print $accountingaccountstatic->getNomUrl(0, 1, 1, '', 1);
|
||||||
print ' <a class="editfielda reposition marginleftonly marginrightonly" href="./card.php?id='.$objp->rowid.'&backtopage='.urlencode($_SERVER["PHP_SELF"].($param ? '?'.$param : '')).'">';
|
print ' <a class="editfielda reposition marginleftonly marginrightonly" href="./card.php?id='.$objp->rowid.'&backtopage='.urlencode($_SERVER["PHP_SELF"].($param ? '?'.$param : '')).'">';
|
||||||
print img_edit();
|
print img_edit();
|
||||||
|
|||||||
@ -503,7 +503,7 @@ if ($result) {
|
|||||||
|
|
||||||
// Suggested accounting account
|
// Suggested accounting account
|
||||||
print '<td>';
|
print '<td>';
|
||||||
print $formaccounting->select_account($objp->aarowid_suggest, 'codeventil'.$objp->rowid, 1, array(), 0, 0, 'codeventil maxwidth300 maxwidthonsmartphone', 'cachewithshowemptyone');
|
print $formaccounting->select_account($objp->aarowid_suggest, 'codeventil'.$objp->rowid, 1, array(), 0, 0, 'codeventil maxwidth200 maxwidthonsmartphone', 'cachewithshowemptyone');
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
print '<td class="center">';
|
print '<td class="center">';
|
||||||
|
|||||||
@ -23,6 +23,8 @@
|
|||||||
* \brief Home accounting module
|
* \brief Home accounting module
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../main.inc.php';
|
require '../main.inc.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
||||||
@ -42,7 +44,7 @@ if ($user->socid > 0) {
|
|||||||
if (!isModEnabled('accounting')) {
|
if (!isModEnabled('accounting')) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
if (empty($user->rights->accounting->mouvements->lire)) {
|
if (!$user->hasRight('accounting', 'mouvements', 'lire')) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
@ -77,7 +79,7 @@ if (GETPOST('addbox')) {
|
|||||||
* View
|
* View
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$help_url = '';
|
$help_url = 'EN:Module_Double_Entry_Accounting#Setup';
|
||||||
|
|
||||||
llxHeader('', $langs->trans("AccountancyArea"), $help_url);
|
llxHeader('', $langs->trans("AccountancyArea"), $help_url);
|
||||||
|
|
||||||
@ -212,7 +214,7 @@ if (!empty($conf->global->INVOICE_USE_SITUATION) && $conf->global->INVOICE_USE_S
|
|||||||
print $s;
|
print $s;
|
||||||
print "<br>\n";
|
print "<br>\n";
|
||||||
|
|
||||||
if (isModEnabled('expensereport')|| isModEnabled('deplacement')) {
|
if (isModEnabled('expensereport') || isModEnabled('deplacement')) {
|
||||||
$step++;
|
$step++;
|
||||||
$s = img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescBind", chr(64 + $step), $langs->transnoentitiesnoconv("ExpenseReports"), '{s}')."\n";
|
$s = img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescBind", chr(64 + $step), $langs->transnoentitiesnoconv("ExpenseReports"), '{s}')."\n";
|
||||||
$s = str_replace('{s}', '<a href="'.DOL_URL_ROOT.'/accountancy/expensereport/index.php"><strong>'.$langs->transnoentitiesnoconv("TransferInAccounting").' - '.$langs->transnoentitiesnoconv("ExpenseReportsVentilation").'</strong></a>', $s);
|
$s = str_replace('{s}', '<a href="'.DOL_URL_ROOT.'/accountancy/expensereport/index.php"><strong>'.$langs->transnoentitiesnoconv("TransferInAccounting").' - '.$langs->transnoentitiesnoconv("ExpenseReportsVentilation").'</strong></a>', $s);
|
||||||
|
|||||||
@ -133,7 +133,7 @@ if (!empty($conf->global->MAIN_COMPANY_PERENTITY_SHARED)) {
|
|||||||
$sql .= " WHERE f.fk_statut > 0";
|
$sql .= " WHERE f.fk_statut > 0";
|
||||||
$sql .= " AND fd.fk_code_ventilation > 0";
|
$sql .= " AND fd.fk_code_ventilation > 0";
|
||||||
$sql .= " AND f.entity IN (".getEntity('facture_fourn', 0).")"; // We don't share object for accountancy
|
$sql .= " AND f.entity IN (".getEntity('facture_fourn', 0).")"; // We don't share object for accountancy
|
||||||
if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) {
|
if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) {
|
||||||
$sql .= " AND f.type IN (".FactureFournisseur::TYPE_STANDARD.",".FactureFournisseur::TYPE_REPLACEMENT.",".FactureFournisseur::TYPE_CREDIT_NOTE.",".FactureFournisseur::TYPE_SITUATION.")";
|
$sql .= " AND f.type IN (".FactureFournisseur::TYPE_STANDARD.",".FactureFournisseur::TYPE_REPLACEMENT.",".FactureFournisseur::TYPE_CREDIT_NOTE.",".FactureFournisseur::TYPE_SITUATION.")";
|
||||||
} else {
|
} else {
|
||||||
$sql .= " AND f.type IN (".FactureFournisseur::TYPE_STANDARD.",".FactureFournisseur::TYPE_REPLACEMENT.",".FactureFournisseur::TYPE_CREDIT_NOTE.",".FactureFournisseur::TYPE_DEPOSIT.",".FactureFournisseur::TYPE_SITUATION.")";
|
$sql .= " AND f.type IN (".FactureFournisseur::TYPE_STANDARD.",".FactureFournisseur::TYPE_REPLACEMENT.",".FactureFournisseur::TYPE_CREDIT_NOTE.",".FactureFournisseur::TYPE_DEPOSIT.",".FactureFournisseur::TYPE_SITUATION.")";
|
||||||
@ -294,9 +294,7 @@ if ($action == 'writebookkeeping') {
|
|||||||
|
|
||||||
$companystatic->id = $tabcompany[$key]['id'];
|
$companystatic->id = $tabcompany[$key]['id'];
|
||||||
$companystatic->name = $tabcompany[$key]['name'];
|
$companystatic->name = $tabcompany[$key]['name'];
|
||||||
$companystatic->code_compta = $tabcompany[$key]['code_compta'];
|
|
||||||
$companystatic->code_compta_fournisseur = $tabcompany[$key]['code_compta_fournisseur'];
|
$companystatic->code_compta_fournisseur = $tabcompany[$key]['code_compta_fournisseur'];
|
||||||
$companystatic->code_client = $tabcompany[$key]['code_client'];
|
|
||||||
$companystatic->code_fournisseur = $tabcompany[$key]['code_fournisseur'];
|
$companystatic->code_fournisseur = $tabcompany[$key]['code_fournisseur'];
|
||||||
$companystatic->fournisseur = 1;
|
$companystatic->fournisseur = 1;
|
||||||
|
|
||||||
@ -381,7 +379,7 @@ if ($action == 'writebookkeeping') {
|
|||||||
if (getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING')) {
|
if (getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING')) {
|
||||||
require_once DOL_DOCUMENT_ROOT . '/accountancy/class/lettering.class.php';
|
require_once DOL_DOCUMENT_ROOT . '/accountancy/class/lettering.class.php';
|
||||||
$lettering_static = new Lettering($db);
|
$lettering_static = new Lettering($db);
|
||||||
$nb_lettering = $lettering_static->bookkeepingLettering(array($bookkeeping->id), 'supplier_invoice');
|
$nb_lettering = $lettering_static->bookkeepingLettering(array($bookkeeping->id));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -636,9 +634,7 @@ if ($action == 'exportcsv') { // ISO and not UTF8 !
|
|||||||
foreach ($tabfac as $key => $val) {
|
foreach ($tabfac as $key => $val) {
|
||||||
$companystatic->id = $tabcompany[$key]['id'];
|
$companystatic->id = $tabcompany[$key]['id'];
|
||||||
$companystatic->name = $tabcompany[$key]['name'];
|
$companystatic->name = $tabcompany[$key]['name'];
|
||||||
$companystatic->code_compta = $tabcompany[$key]['code_compta'];
|
|
||||||
$companystatic->code_compta_fournisseur = $tabcompany[$key]['code_compta_fournisseur'];
|
$companystatic->code_compta_fournisseur = $tabcompany[$key]['code_compta_fournisseur'];
|
||||||
$companystatic->code_client = $tabcompany[$key]['code_client'];
|
|
||||||
$companystatic->code_fournisseur = $tabcompany[$key]['code_fournisseur'];
|
$companystatic->code_fournisseur = $tabcompany[$key]['code_fournisseur'];
|
||||||
$companystatic->fournisseur = 1;
|
$companystatic->fournisseur = 1;
|
||||||
|
|
||||||
@ -767,8 +763,8 @@ if (empty($action) || $action == 'view') {
|
|||||||
$periodlink = '';
|
$periodlink = '';
|
||||||
$exportlink = '';
|
$exportlink = '';
|
||||||
$builddate = dol_now();
|
$builddate = dol_now();
|
||||||
$description .= $langs->trans("DescJournalOnlyBindedVisible").'<br>';
|
$description = $langs->trans("DescJournalOnlyBindedVisible").'<br>';
|
||||||
if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) {
|
if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) {
|
||||||
$description .= $langs->trans("DepositsAreNotIncluded");
|
$description .= $langs->trans("DepositsAreNotIncluded");
|
||||||
} else {
|
} else {
|
||||||
$description .= $langs->trans("DepositsAreIncluded");
|
$description .= $langs->trans("DepositsAreIncluded");
|
||||||
@ -847,9 +843,7 @@ if (empty($action) || $action == 'view') {
|
|||||||
foreach ($tabfac as $key => $val) {
|
foreach ($tabfac as $key => $val) {
|
||||||
$companystatic->id = $tabcompany[$key]['id'];
|
$companystatic->id = $tabcompany[$key]['id'];
|
||||||
$companystatic->name = $tabcompany[$key]['name'];
|
$companystatic->name = $tabcompany[$key]['name'];
|
||||||
$companystatic->code_compta = $tabcompany[$key]['code_compta'];
|
|
||||||
$companystatic->code_compta_fournisseur = $tabcompany[$key]['code_compta_fournisseur'];
|
$companystatic->code_compta_fournisseur = $tabcompany[$key]['code_compta_fournisseur'];
|
||||||
$companystatic->code_client = $tabcompany[$key]['code_client'];
|
|
||||||
$companystatic->code_fournisseur = $tabcompany[$key]['code_fournisseur'];
|
$companystatic->code_fournisseur = $tabcompany[$key]['code_fournisseur'];
|
||||||
$companystatic->fournisseur = 1;
|
$companystatic->fournisseur = 1;
|
||||||
|
|
||||||
|
|||||||
@ -30,6 +30,7 @@
|
|||||||
* \brief Page with sells journal
|
* \brief Page with sells journal
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/report.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/report.lib.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
||||||
@ -310,9 +311,7 @@ if ($action == 'writebookkeeping') {
|
|||||||
$companystatic->id = $tabcompany[$key]['id'];
|
$companystatic->id = $tabcompany[$key]['id'];
|
||||||
$companystatic->name = $tabcompany[$key]['name'];
|
$companystatic->name = $tabcompany[$key]['name'];
|
||||||
$companystatic->code_compta = $tabcompany[$key]['code_compta'];
|
$companystatic->code_compta = $tabcompany[$key]['code_compta'];
|
||||||
$companystatic->code_compta_fournisseur = $tabcompany[$key]['code_compta_fournisseur'];
|
|
||||||
$companystatic->code_client = $tabcompany[$key]['code_client'];
|
$companystatic->code_client = $tabcompany[$key]['code_client'];
|
||||||
$companystatic->code_fournisseur = $tabcompany[$key]['code_fournisseur'];
|
|
||||||
$companystatic->client = 3;
|
$companystatic->client = 3;
|
||||||
|
|
||||||
$invoicestatic->id = $key;
|
$invoicestatic->id = $key;
|
||||||
@ -394,7 +393,7 @@ if ($action == 'writebookkeeping') {
|
|||||||
if (getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING')) {
|
if (getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING')) {
|
||||||
require_once DOL_DOCUMENT_ROOT . '/accountancy/class/lettering.class.php';
|
require_once DOL_DOCUMENT_ROOT . '/accountancy/class/lettering.class.php';
|
||||||
$lettering_static = new Lettering($db);
|
$lettering_static = new Lettering($db);
|
||||||
$nb_lettering = $lettering_static->bookkeepingLettering(array($bookkeeping->id), 'customer_invoice');
|
$nb_lettering = $lettering_static->bookkeepingLettering(array($bookkeeping->id));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -600,9 +599,7 @@ if ($action == 'exportcsv') { // ISO and not UTF8 !
|
|||||||
$companystatic->id = $tabcompany[$key]['id'];
|
$companystatic->id = $tabcompany[$key]['id'];
|
||||||
$companystatic->name = $tabcompany[$key]['name'];
|
$companystatic->name = $tabcompany[$key]['name'];
|
||||||
$companystatic->code_compta = $tabcompany[$key]['code_compta'];
|
$companystatic->code_compta = $tabcompany[$key]['code_compta'];
|
||||||
$companystatic->code_compta_fournisseur = $tabcompany[$key]['code_compta_fournisseur'];
|
|
||||||
$companystatic->code_client = $tabcompany[$key]['code_client'];
|
$companystatic->code_client = $tabcompany[$key]['code_client'];
|
||||||
$companystatic->code_fournisseur = $tabcompany[$key]['code_fournisseur'];
|
|
||||||
$companystatic->client = 3;
|
$companystatic->client = 3;
|
||||||
|
|
||||||
$invoicestatic->id = $key;
|
$invoicestatic->id = $key;
|
||||||
@ -790,9 +787,7 @@ if (empty($action) || $action == 'view') {
|
|||||||
$companystatic->id = $tabcompany[$key]['id'];
|
$companystatic->id = $tabcompany[$key]['id'];
|
||||||
$companystatic->name = $tabcompany[$key]['name'];
|
$companystatic->name = $tabcompany[$key]['name'];
|
||||||
$companystatic->code_compta = $tabcompany[$key]['code_compta'];
|
$companystatic->code_compta = $tabcompany[$key]['code_compta'];
|
||||||
$companystatic->code_compta_fournisseur = $tabcompany[$key]['code_compta_fournisseur'];
|
|
||||||
$companystatic->code_client = $tabcompany[$key]['code_client'];
|
$companystatic->code_client = $tabcompany[$key]['code_client'];
|
||||||
$companystatic->code_fournisseur = $tabcompany[$key]['code_fournisseur'];
|
|
||||||
$companystatic->client = 3;
|
$companystatic->client = 3;
|
||||||
|
|
||||||
$invoicestatic->id = $key;
|
$invoicestatic->id = $key;
|
||||||
|
|||||||
@ -21,6 +21,7 @@
|
|||||||
* \brief Page of a journal
|
* \brief Page of a journal
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
||||||
@ -51,7 +52,7 @@ if ($result > 0) {
|
|||||||
} elseif ($result < 0) {
|
} elseif ($result < 0) {
|
||||||
dol_print_error('', $object->error, $object->errors);
|
dol_print_error('', $object->error, $object->errors);
|
||||||
} elseif ($result == 0) {
|
} elseif ($result == 0) {
|
||||||
accessforbidden($langs->trans('ErrorRecordNotFound'));
|
accessforbidden('ErrorRecordNotFound');
|
||||||
}
|
}
|
||||||
|
|
||||||
$hookmanager->initHooks(array('globaljournal', $object->nature.'journal'));
|
$hookmanager->initHooks(array('globaljournal', $object->nature.'journal'));
|
||||||
@ -201,6 +202,9 @@ if ($object->nature == 2 || $object->nature == 3) {
|
|||||||
} else {
|
} else {
|
||||||
$description .= $langs->trans("DepositsAreIncluded");
|
$description .= $langs->trans("DepositsAreIncluded");
|
||||||
}
|
}
|
||||||
|
if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) {
|
||||||
|
$description .= $langs->trans("SupplierDepositsAreNotIncluded");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$listofchoices = array('notyet' => $langs->trans("NotYetInGeneralLedger"), 'already' => $langs->trans("AlreadyInGeneralLedger"));
|
$listofchoices = array('notyet' => $langs->trans("NotYetInGeneralLedger"), 'already' => $langs->trans("AlreadyInGeneralLedger"));
|
||||||
@ -289,7 +293,8 @@ print '<td class="right">' . $langs->trans("Debit") . '</td>';
|
|||||||
print '<td class="right">' . $langs->trans("Credit") . '</td>';
|
print '<td class="right">' . $langs->trans("Credit") . '</td>';
|
||||||
print "</tr>\n";
|
print "</tr>\n";
|
||||||
|
|
||||||
foreach ($journal_data as $element_id => $element) {
|
if (is_array($journal_data) && !empty($journal_data)) {
|
||||||
|
foreach ($journal_data as $element_id => $element) {
|
||||||
foreach ($element['blocks'] as $lines) {
|
foreach ($element['blocks'] as $lines) {
|
||||||
foreach ($lines as $line) {
|
foreach ($lines as $line) {
|
||||||
print '<tr class="oddeven">';
|
print '<tr class="oddeven">';
|
||||||
@ -304,6 +309,7 @@ foreach ($journal_data as $element_id => $element) {
|
|||||||
print '</tr>';
|
print '</tr>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
print '</table>';
|
print '</table>';
|
||||||
|
|||||||
@ -24,6 +24,7 @@
|
|||||||
* \brief Home supplier journalization page
|
* \brief Home supplier journalization page
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
||||||
|
|||||||
@ -342,7 +342,7 @@ if (strlen(trim($search_country))) {
|
|||||||
if (strlen(trim($search_tvaintra))) {
|
if (strlen(trim($search_tvaintra))) {
|
||||||
$sql .= natural_search("s.tva_intra", $search_tvaintra);
|
$sql .= natural_search("s.tva_intra", $search_tvaintra);
|
||||||
}
|
}
|
||||||
if (!empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) {
|
if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) {
|
||||||
$sql .= " AND f.type IN (".FactureFournisseur::TYPE_STANDARD.",".FactureFournisseur::TYPE_REPLACEMENT.",".FactureFournisseur::TYPE_CREDIT_NOTE.",".FactureFournisseur::TYPE_SITUATION.")";
|
$sql .= " AND f.type IN (".FactureFournisseur::TYPE_STANDARD.",".FactureFournisseur::TYPE_REPLACEMENT.",".FactureFournisseur::TYPE_CREDIT_NOTE.",".FactureFournisseur::TYPE_SITUATION.")";
|
||||||
} else {
|
} else {
|
||||||
$sql .= " AND f.type IN (".FactureFournisseur::TYPE_STANDARD.",".FactureFournisseur::TYPE_REPLACEMENT.",".FactureFournisseur::TYPE_CREDIT_NOTE.",".FactureFournisseur::TYPE_DEPOSIT.",".FactureFournisseur::TYPE_SITUATION.")";
|
$sql .= " AND f.type IN (".FactureFournisseur::TYPE_STANDARD.",".FactureFournisseur::TYPE_REPLACEMENT.",".FactureFournisseur::TYPE_CREDIT_NOTE.",".FactureFournisseur::TYPE_DEPOSIT.",".FactureFournisseur::TYPE_SITUATION.")";
|
||||||
@ -749,7 +749,7 @@ if ($result) {
|
|||||||
|
|
||||||
// Suggested accounting account
|
// Suggested accounting account
|
||||||
print '<td>';
|
print '<td>';
|
||||||
print $formaccounting->select_account(($default_account > 0 && $confirm === 'yes' && in_array($objp->rowid."_".$i, $toselect)) ? $default_account : $suggestedid, 'codeventil'.$facturefourn_static_det->id, 1, array(), 0, 0, 'codeventil maxwidth200 maxwidthonsmartphone', 'cachewithshowemptyone');
|
print $formaccounting->select_account(($default_account > 0 && $confirm === 'yes' && in_array($objp->rowid."_".$i, $toselect)) ? $default_account : $suggestedid, 'codeventil'.$facturefourn_static_det->id, 1, array(), 0, 0, 'codeventil maxwidth150 maxwidthonsmartphone', 'cachewithshowemptyone');
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
// Column with checkbox
|
// Column with checkbox
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
/* Copyright (C) 2015-2018 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
/* Copyright (C) 2015-2022 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||||
* Copyright (C) 2016 Charlie Benke <charlie@patas-monkey.com>
|
* Copyright (C) 2016 Charlie Benke <charlie@patas-monkey.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
|
||||||
@ -16,7 +16,7 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// $formatexportset ùust be defined
|
// $formatexportset must be defined
|
||||||
|
|
||||||
// Protection to avoid direct call of template
|
// Protection to avoid direct call of template
|
||||||
if (empty($conf) || !is_object($conf)) {
|
if (empty($conf) || !is_object($conf)) {
|
||||||
@ -24,11 +24,11 @@ if (empty($conf) || !is_object($conf)) {
|
|||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
$code = $conf->global->MAIN_INFO_ACCOUNTANT_CODE;
|
$code = getDolGlobalString('MAIN_INFO_ACCOUNTANT_CODE');
|
||||||
$prefix = $conf->global->ACCOUNTING_EXPORT_PREFIX_SPEC;
|
$prefix = getDolGlobalString('ACCOUNTING_EXPORT_PREFIX_SPEC');
|
||||||
$format = $conf->global->ACCOUNTING_EXPORT_FORMAT;
|
$format = getDolGlobalString('ACCOUNTING_EXPORT_FORMAT');
|
||||||
$nodateexport = $conf->global->ACCOUNTING_EXPORT_NO_DATE_IN_FILENAME;
|
$nodateexport = getDolGlobalInt('ACCOUNTING_EXPORT_NO_DATE_IN_FILENAME');
|
||||||
$siren = $conf->global->MAIN_INFO_SIREN;
|
$siren = getDolGlobalString('MAIN_INFO_SIREN');
|
||||||
|
|
||||||
$date_export = "_".dol_print_date(dol_now(), '%Y%m%d%H%M%S');
|
$date_export = "_".dol_print_date(dol_now(), '%Y%m%d%H%M%S');
|
||||||
$endaccountingperiod = dol_print_date(dol_now(), '%Y%m%d');
|
$endaccountingperiod = dol_print_date(dol_now(), '%Y%m%d');
|
||||||
|
|||||||
@ -30,6 +30,7 @@
|
|||||||
* \brief Page to setup the module Foundation
|
* \brief Page to setup the module Foundation
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
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/member.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/member.lib.php';
|
||||||
@ -99,7 +100,7 @@ if ($action == 'set_default') {
|
|||||||
} else {
|
} else {
|
||||||
dol_print_error($db);
|
dol_print_error($db);
|
||||||
}
|
}
|
||||||
} elseif ($action == 'updateall') {
|
} elseif ($action == 'updatemainoptions') {
|
||||||
$db->begin();
|
$db->begin();
|
||||||
$res1 = $res2 = $res3 = $res4 = $res5 = $res6 = $res7 = 0;
|
$res1 = $res2 = $res3 = $res4 = $res5 = $res6 = $res7 = 0;
|
||||||
$res1 = dolibarr_set_const($db, 'ADHERENT_LOGIN_NOT_REQUIRED', GETPOST('ADHERENT_LOGIN_NOT_REQUIRED', 'alpha') ? 0 : 1, 'chaine', 0, '', $conf->entity);
|
$res1 = dolibarr_set_const($db, 'ADHERENT_LOGIN_NOT_REQUIRED', GETPOST('ADHERENT_LOGIN_NOT_REQUIRED', 'alpha') ? 0 : 1, 'chaine', 0, '', $conf->entity);
|
||||||
@ -111,7 +112,7 @@ if ($action == 'set_default') {
|
|||||||
if (isModEnabled('facture')) {
|
if (isModEnabled('facture')) {
|
||||||
$res4 = dolibarr_set_const($db, 'ADHERENT_VAT_FOR_SUBSCRIPTIONS', GETPOST('ADHERENT_VAT_FOR_SUBSCRIPTIONS', 'alpha'), 'chaine', 0, '', $conf->entity);
|
$res4 = dolibarr_set_const($db, 'ADHERENT_VAT_FOR_SUBSCRIPTIONS', GETPOST('ADHERENT_VAT_FOR_SUBSCRIPTIONS', 'alpha'), 'chaine', 0, '', $conf->entity);
|
||||||
$res5 = dolibarr_set_const($db, 'ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS', GETPOST('ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS', 'alpha'), 'chaine', 0, '', $conf->entity);
|
$res5 = dolibarr_set_const($db, 'ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS', GETPOST('ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS', 'alpha'), 'chaine', 0, '', $conf->entity);
|
||||||
if (!empty($conf->product->enabled) || !empty($conf->service->enabled)) {
|
if (isModEnabled("product") || isModEnabled("service")) {
|
||||||
$res6 = dolibarr_set_const($db, 'ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS', GETPOST('ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS', 'alpha'), 'chaine', 0, '', $conf->entity);
|
$res6 = dolibarr_set_const($db, 'ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS', GETPOST('ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS', 'alpha'), 'chaine', 0, '', $conf->entity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -122,6 +123,35 @@ if ($action == 'set_default') {
|
|||||||
setEventMessages('RecordModifiedSuccessfully', null, 'mesgs');
|
setEventMessages('RecordModifiedSuccessfully', null, 'mesgs');
|
||||||
$db->commit();
|
$db->commit();
|
||||||
}
|
}
|
||||||
|
} elseif ($action == 'updatememberscards') {
|
||||||
|
$db->begin();
|
||||||
|
$res1 = $res2 = $res3 = $res4 = 0;
|
||||||
|
$res1 = dolibarr_set_const($db, 'ADHERENT_CARD_TYPE', GETPOST('ADHERENT_CARD_TYPE'), 'chaine', 0, '', $conf->entity);
|
||||||
|
$res2 = dolibarr_set_const($db, 'ADHERENT_CARD_HEADER_TEXT', GETPOST('ADHERENT_CARD_HEADER_TEXT', 'alpha'), 'chaine', 0, '', $conf->entity);
|
||||||
|
$res3 = dolibarr_set_const($db, 'ADHERENT_CARD_TEXT', GETPOST('ADHERENT_CARD_TEXT', 'alpha'), 'chaine', 0, '', $conf->entity);
|
||||||
|
$res3 = dolibarr_set_const($db, 'ADHERENT_CARD_TEXT_RIGHT', GETPOST('ADHERENT_CARD_TEXT_RIGHT', 'alpha'), 'chaine', 0, '', $conf->entity);
|
||||||
|
$res4 = dolibarr_set_const($db, 'ADHERENT_CARD_FOOTER_TEXT', GETPOST('ADHERENT_CARD_FOOTER_TEXT', 'alpha'), 'chaine', 0, '', $conf->entity);
|
||||||
|
|
||||||
|
if ($res1 < 0 || $res2 < 0 || $res3 < 0 || $res4 < 0) {
|
||||||
|
setEventMessages('ErrorFailedToSaveDate', null, 'errors');
|
||||||
|
$db->rollback();
|
||||||
|
} else {
|
||||||
|
setEventMessages('RecordModifiedSuccessfully', null, 'mesgs');
|
||||||
|
$db->commit();
|
||||||
|
}
|
||||||
|
} elseif ($action == 'updatememberstickets') {
|
||||||
|
$db->begin();
|
||||||
|
$res1 = $res2 = 0;
|
||||||
|
$res1 = dolibarr_set_const($db, 'ADHERENT_ETIQUETTE_TYPE', GETPOST('ADHERENT_ETIQUETTE_TYPE'), 'chaine', 0, '', $conf->entity);
|
||||||
|
$res2 = dolibarr_set_const($db, 'ADHERENT_ETIQUETTE_TEXT', GETPOST('ADHERENT_ETIQUETTE_TEXT', 'alpha'), 'chaine', 0, '', $conf->entity);
|
||||||
|
|
||||||
|
if ($res1 < 0 || $res2 < 0) {
|
||||||
|
setEventMessages('ErrorFailedToSaveDate', null, 'errors');
|
||||||
|
$db->rollback();
|
||||||
|
} else {
|
||||||
|
setEventMessages('RecordModifiedSuccessfully', null, 'mesgs');
|
||||||
|
$db->commit();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Action to update or add a constant
|
// Action to update or add a constant
|
||||||
@ -129,6 +159,7 @@ if ($action == 'update' || $action == 'add') {
|
|||||||
$constname = GETPOST('constname', 'alpha');
|
$constname = GETPOST('constname', 'alpha');
|
||||||
$constvalue = (GETPOST('constvalue_'.$constname) ? GETPOST('constvalue_'.$constname) : GETPOST('constvalue'));
|
$constvalue = (GETPOST('constvalue_'.$constname) ? GETPOST('constvalue_'.$constname) : GETPOST('constvalue'));
|
||||||
|
|
||||||
|
|
||||||
if (($constname == 'ADHERENT_CARD_TYPE' || $constname == 'ADHERENT_ETIQUETTE_TYPE' || $constname == 'ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS') && $constvalue == -1) {
|
if (($constname == 'ADHERENT_CARD_TYPE' || $constname == 'ADHERENT_ETIQUETTE_TYPE' || $constname == 'ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS') && $constvalue == -1) {
|
||||||
$constvalue = '';
|
$constvalue = '';
|
||||||
}
|
}
|
||||||
@ -194,10 +225,10 @@ print dol_get_fiche_head($head, 'general', $langs->trans("Members"), -1, 'user')
|
|||||||
|
|
||||||
print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
|
print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
|
||||||
print '<input type="hidden" name="token" value="'.newToken().'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '<input type="hidden" name="action" value="updateall">';
|
print '<input type="hidden" name="action" value="updatemainoptions">';
|
||||||
|
|
||||||
|
|
||||||
// Mains options
|
// Main options
|
||||||
|
|
||||||
print load_fiche_titre($langs->trans("MemberMainOptions"), '', '');
|
print load_fiche_titre($langs->trans("MemberMainOptions"), '', '');
|
||||||
|
|
||||||
@ -238,13 +269,13 @@ print "</td></tr>\n";
|
|||||||
// Insert subscription into bank account
|
// Insert subscription into bank account
|
||||||
print '<tr class="oddeven"><td>'.$langs->trans("MoreActionsOnSubscription").'</td>';
|
print '<tr class="oddeven"><td>'.$langs->trans("MoreActionsOnSubscription").'</td>';
|
||||||
$arraychoices = array('0'=>$langs->trans("None"));
|
$arraychoices = array('0'=>$langs->trans("None"));
|
||||||
if (!empty($conf->banque->enabled)) {
|
if (isModEnabled("banque")) {
|
||||||
$arraychoices['bankdirect'] = $langs->trans("MoreActionBankDirect");
|
$arraychoices['bankdirect'] = $langs->trans("MoreActionBankDirect");
|
||||||
}
|
}
|
||||||
if (!empty($conf->banque->enabled) && !empty($conf->societe->enabled) && isModEnabled('facture')) {
|
if (isModEnabled("banque") && isModEnabled("societe") && isModEnabled('facture')) {
|
||||||
$arraychoices['invoiceonly'] = $langs->trans("MoreActionInvoiceOnly");
|
$arraychoices['invoiceonly'] = $langs->trans("MoreActionInvoiceOnly");
|
||||||
}
|
}
|
||||||
if (!empty($conf->banque->enabled) && !empty($conf->societe->enabled) && isModEnabled('facture')) {
|
if (isModEnabled("banque") && isModEnabled("societe") && isModEnabled('facture')) {
|
||||||
$arraychoices['bankviainvoice'] = $langs->trans("MoreActionBankViaInvoice");
|
$arraychoices['bankviainvoice'] = $langs->trans("MoreActionBankViaInvoice");
|
||||||
}
|
}
|
||||||
print '<td>';
|
print '<td>';
|
||||||
@ -258,7 +289,7 @@ print "</tr>\n";
|
|||||||
// Use vat for invoice creation
|
// Use vat for invoice creation
|
||||||
if (isModEnabled('facture')) {
|
if (isModEnabled('facture')) {
|
||||||
print '<tr class="oddeven"><td>'.$langs->trans("VATToUseForSubscriptions").'</td>';
|
print '<tr class="oddeven"><td>'.$langs->trans("VATToUseForSubscriptions").'</td>';
|
||||||
if (!empty($conf->banque->enabled)) {
|
if (isModEnabled("banque")) {
|
||||||
print '<td>';
|
print '<td>';
|
||||||
print $form->selectarray('ADHERENT_VAT_FOR_SUBSCRIPTIONS', array('0'=>$langs->trans("NoVatOnSubscription"), 'defaultforfoundationcountry'=>$langs->trans("Default")), (empty($conf->global->ADHERENT_VAT_FOR_SUBSCRIPTIONS) ? '0' : $conf->global->ADHERENT_VAT_FOR_SUBSCRIPTIONS), 0);
|
print $form->selectarray('ADHERENT_VAT_FOR_SUBSCRIPTIONS', array('0'=>$langs->trans("NoVatOnSubscription"), 'defaultforfoundationcountry'=>$langs->trans("Default")), (empty($conf->global->ADHERENT_VAT_FOR_SUBSCRIPTIONS) ? '0' : $conf->global->ADHERENT_VAT_FOR_SUBSCRIPTIONS), 0);
|
||||||
print '</td>';
|
print '</td>';
|
||||||
@ -269,7 +300,7 @@ if (isModEnabled('facture')) {
|
|||||||
}
|
}
|
||||||
print "</tr>\n";
|
print "</tr>\n";
|
||||||
|
|
||||||
if (!empty($conf->product->enabled) || !empty($conf->service->enabled)) {
|
if (isModEnabled("product") || isModEnabled("service")) {
|
||||||
print '<tr class="oddeven"><td>'.$langs->trans("ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS").'</td>';
|
print '<tr class="oddeven"><td>'.$langs->trans("ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS").'</td>';
|
||||||
print '<td>';
|
print '<td>';
|
||||||
$selected = (empty($conf->global->ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS) ? '' : $conf->global->ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS);
|
$selected = (empty($conf->global->ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS) ? '' : $conf->global->ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS);
|
||||||
@ -293,6 +324,8 @@ print '</form>';
|
|||||||
print '<br>';
|
print '<br>';
|
||||||
|
|
||||||
|
|
||||||
|
// Document templates for documents generated from member record
|
||||||
|
|
||||||
$dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
|
$dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
|
||||||
|
|
||||||
// Defined model definition table
|
// Defined model definition table
|
||||||
@ -430,24 +463,12 @@ print '</div>';
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
TODO Use a global form instead of embeded form into table
|
// Generation of cards for members
|
||||||
|
|
||||||
print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
|
print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
|
||||||
print '<input type="hidden" name="token" value="'.newToken().'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '<input type="hidden" name="action" value="updateall">';
|
print '<input type="hidden" name="action" value="updatememberscards">';
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Edit info of model document
|
|
||||||
*/
|
|
||||||
$constantes = array(
|
|
||||||
'ADHERENT_CARD_TYPE',
|
|
||||||
//'ADHERENT_CARD_BACKGROUND',
|
|
||||||
'ADHERENT_CARD_HEADER_TEXT',
|
|
||||||
'ADHERENT_CARD_TEXT',
|
|
||||||
'ADHERENT_CARD_TEXT_RIGHT',
|
|
||||||
'ADHERENT_CARD_FOOTER_TEXT'
|
|
||||||
);
|
|
||||||
|
|
||||||
print load_fiche_titre($langs->trans("MembersCards"), '', '');
|
print load_fiche_titre($langs->trans("MembersCards"), '', '');
|
||||||
|
|
||||||
@ -456,15 +477,65 @@ $helptext .= '__DOL_MAIN_URL_ROOT__, __ID__, __FIRSTNAME__, __LASTNAME__, __FULL
|
|||||||
$helptext .= '__COMPANY__, __ADDRESS__, __ZIP__, __TOWN__, __COUNTRY__, __EMAIL__, __BIRTH__, __PHOTO__, __TYPE__, ';
|
$helptext .= '__COMPANY__, __ADDRESS__, __ZIP__, __TOWN__, __COUNTRY__, __EMAIL__, __BIRTH__, __PHOTO__, __TYPE__, ';
|
||||||
$helptext .= '__YEAR__, __MONTH__, __DAY__';
|
$helptext .= '__YEAR__, __MONTH__, __DAY__';
|
||||||
|
|
||||||
form_constantes($constantes, 0, $helptext);
|
print '<div class="div-table-responsive-no-min">';
|
||||||
|
print '<table class="noborder centpercent">';
|
||||||
|
print '<tr class="liste_titre">';
|
||||||
|
print '<td>'.$langs->trans("Description").'</td>';
|
||||||
|
print '<td>'.$form->textwithpicto($langs->trans("Value"), $helptext, 1, 'help', '', 0, 2, 'idhelptext').'</td>';
|
||||||
|
print "</tr>\n";
|
||||||
|
|
||||||
|
// Format of cards page
|
||||||
|
print '<tr class="oddeven"><td>'.$langs->trans("DescADHERENT_CARD_TYPE").'</td><td>';
|
||||||
|
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/format_cards.lib.php'; // List of possible labels (defined into $_Avery_Labels variable set into format_cards.lib.php)
|
||||||
|
$arrayoflabels = array();
|
||||||
|
foreach (array_keys($_Avery_Labels) as $codecards) {
|
||||||
|
$arrayoflabels[$codecards] = $_Avery_Labels[$codecards]['name'];
|
||||||
|
}
|
||||||
|
print $form->selectarray('ADHERENT_CARD_TYPE', $arrayoflabels, getDolGlobalString('ADHERENT_CARD_TYPE') ? getDolGlobalString('ADHERENT_CARD_TYPE') : 'CARD', 1, 0, 0);
|
||||||
|
|
||||||
|
print "</td></tr>\n";
|
||||||
|
|
||||||
|
// Text printed on top of member cards
|
||||||
|
print '<tr class="oddeven"><td>'.$langs->trans("DescADHERENT_CARD_HEADER_TEXT").'</td><td>';
|
||||||
|
print '<input type="text" class="flat minwidth300" name="ADHERENT_CARD_HEADER_TEXT" value="'.dol_escape_htmltag(getDolGlobalString('ADHERENT_CARD_HEADER_TEXT')).'">';
|
||||||
|
print "</td></tr>\n";
|
||||||
|
|
||||||
|
// Text printed on member cards (align on left)
|
||||||
|
print '<tr class="oddeven"><td>'.$langs->trans("DescADHERENT_CARD_TEXT").'</td><td>';
|
||||||
|
print '<textarea class="flat" name="ADHERENT_CARD_TEXT" cols="50" rows="5" wrap="soft">'."\n";
|
||||||
|
print getDolGlobalString('ADHERENT_CARD_TEXT');
|
||||||
|
print '</textarea>';
|
||||||
|
print "</td></tr>\n";
|
||||||
|
|
||||||
|
// Text printed on member cards (align on right)
|
||||||
|
print '<tr class="oddeven"><td>'.$langs->trans("DescADHERENT_CARD_TEXT_RIGHT").'</td><td>';
|
||||||
|
print '<textarea class="flat" name="ADHERENT_CARD_TEXT_RIGHT" cols="50" rows="5" wrap="soft">'."\n";
|
||||||
|
print getDolGlobalString('ADHERENT_CARD_TEXT_RIGHT');
|
||||||
|
print '</textarea>';
|
||||||
|
print "</td></tr>\n";
|
||||||
|
|
||||||
|
// Text printed on bottom of member cards
|
||||||
|
print '<tr class="oddeven"><td>'.$langs->trans("DescADHERENT_CARD_FOOTER_TEXT").'</td><td>';
|
||||||
|
print '<input type="text" class="flat minwidth300" name="ADHERENT_CARD_FOOTER_TEXT" value="'.dol_escape_htmltag(getDolGlobalString('ADHERENT_CARD_FOOTER_TEXT')).'">';
|
||||||
|
print "</td></tr>\n";
|
||||||
|
|
||||||
|
print '</table>';
|
||||||
|
print '</div>';
|
||||||
|
|
||||||
|
print '<div class="center">';
|
||||||
|
print '<input type="submit" class="button" value="'.$langs->trans("Update").'" name="Button">';
|
||||||
|
print '</div>';
|
||||||
|
|
||||||
|
print '</form>';
|
||||||
|
|
||||||
print '<br>';
|
print '<br>';
|
||||||
|
|
||||||
|
// Membership address sheet
|
||||||
|
|
||||||
/*
|
print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
|
||||||
* Edit info of model document
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
*/
|
print '<input type="hidden" name="action" value="updatememberstickets">';
|
||||||
$constantes = array('ADHERENT_ETIQUETTE_TYPE', 'ADHERENT_ETIQUETTE_TEXT');
|
|
||||||
|
|
||||||
print load_fiche_titre($langs->trans("MembersTickets"), '', '');
|
print load_fiche_titre($langs->trans("MembersTickets"), '', '');
|
||||||
|
|
||||||
@ -473,9 +544,42 @@ $helptext .= '__DOL_MAIN_URL_ROOT__, __ID__, __FIRSTNAME__, __LASTNAME__, __FULL
|
|||||||
$helptext .= '__COMPANY__, __ADDRESS__, __ZIP__, __TOWN__, __COUNTRY__, __EMAIL__, __BIRTH__, __PHOTO__, __TYPE__, ';
|
$helptext .= '__COMPANY__, __ADDRESS__, __ZIP__, __TOWN__, __COUNTRY__, __EMAIL__, __BIRTH__, __PHOTO__, __TYPE__, ';
|
||||||
$helptext .= '__YEAR__, __MONTH__, __DAY__';
|
$helptext .= '__YEAR__, __MONTH__, __DAY__';
|
||||||
|
|
||||||
form_constantes($constantes, 0, $helptext);
|
print '<div class="div-table-responsive-no-min">';
|
||||||
|
print '<table class="noborder centpercent">';
|
||||||
|
print '<tr class="liste_titre">';
|
||||||
|
print '<td>'.$langs->trans("Description").'</td>';
|
||||||
|
print '<td>'.$form->textwithpicto($langs->trans("Value"), $helptext, 1, 'help', '', 0, 2, 'idhelptext').'</td>';
|
||||||
|
print "</tr>\n";
|
||||||
|
|
||||||
//print '</form>';
|
// Format of labels page
|
||||||
|
print '<tr class="oddeven"><td>'.$langs->trans("DescADHERENT_ETIQUETTE_TYPE").'</td><td>';
|
||||||
|
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/format_cards.lib.php'; // List of possible labels (defined into $_Avery_Labels variable set into format_cards.lib.php)
|
||||||
|
$arrayoflabels = array();
|
||||||
|
foreach (array_keys($_Avery_Labels) as $codecards) {
|
||||||
|
$arrayoflabels[$codecards] = $_Avery_Labels[$codecards]['name'];
|
||||||
|
}
|
||||||
|
print $form->selectarray('ADHERENT_ETIQUETTE_TYPE', $arrayoflabels, getDolGlobalString('ADHERENT_ETIQUETTE_TYPE') ? getDolGlobalString('ADHERENT_ETIQUETTE_TYPE') : 'CARD', 1, 0, 0);
|
||||||
|
|
||||||
|
print "</td></tr>\n";
|
||||||
|
|
||||||
|
// Text printed on member address sheets
|
||||||
|
print '<tr class="oddeven"><td>'.$langs->trans("DescADHERENT_ETIQUETTE_TEXT").'</td><td>';
|
||||||
|
print '<textarea class="flat" name="ADHERENT_ETIQUETTE_TEXT" cols="50" rows="5" wrap="soft">'."\n";
|
||||||
|
print getDolGlobalString('ADHERENT_ETIQUETTE_TEXT');
|
||||||
|
print '</textarea>';
|
||||||
|
print "</td></tr>\n";
|
||||||
|
|
||||||
|
print '</table>';
|
||||||
|
print '</div>';
|
||||||
|
|
||||||
|
print '<div class="center">';
|
||||||
|
print '<input type="submit" class="button" value="'.$langs->trans("Update").'" name="Button">';
|
||||||
|
print '</div>';
|
||||||
|
|
||||||
|
print '</form>';
|
||||||
|
|
||||||
|
print '<br>';
|
||||||
|
|
||||||
print "<br>";
|
print "<br>";
|
||||||
|
|
||||||
|
|||||||
@ -29,6 +29,7 @@
|
|||||||
* \brief Page to setup the module Foundation
|
* \brief Page to setup the module Foundation
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
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/member.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/member.lib.php';
|
||||||
|
|||||||
@ -24,6 +24,7 @@
|
|||||||
* \brief Page to setup extra fields of members
|
* \brief Page to setup extra fields of members
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/member.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/member.lib.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
|
||||||
@ -81,14 +82,6 @@ require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_view.tpl.php';
|
|||||||
print dol_get_fiche_end();
|
print dol_get_fiche_end();
|
||||||
|
|
||||||
|
|
||||||
// Buttons
|
|
||||||
if ($action != 'create' && $action != 'edit') {
|
|
||||||
print '<div class="tabsAction">';
|
|
||||||
print '<a class="butAction reposition" href="'.$_SERVER["PHP_SELF"].'?action=create">'.$langs->trans("NewAttribute").'</a>';
|
|
||||||
print "</div>";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Creation of an optional field
|
// Creation of an optional field
|
||||||
if ($action == 'create') {
|
if ($action == 'create') {
|
||||||
print '<div name="topofform"></div><br>';
|
print '<div name="topofform"></div><br>';
|
||||||
|
|||||||
@ -27,6 +27,7 @@
|
|||||||
* \brief Page to setup extra fields of members
|
* \brief Page to setup extra fields of members
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/member.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/member.lib.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
|
||||||
@ -84,14 +85,6 @@ require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_view.tpl.php';
|
|||||||
print dol_get_fiche_end();
|
print dol_get_fiche_end();
|
||||||
|
|
||||||
|
|
||||||
// Buttons
|
|
||||||
if ($action != 'create' && $action != 'edit') {
|
|
||||||
print '<div class="tabsAction">';
|
|
||||||
print '<a class="butAction reposition" href="'.$_SERVER["PHP_SELF"].'?action=create">'.$langs->trans("NewAttribute").'</a>';
|
|
||||||
print "</div>";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Creation of an optional field
|
// Creation of an optional field
|
||||||
if ($action == 'create') {
|
if ($action == 'create') {
|
||||||
print "<br>";
|
print "<br>";
|
||||||
|
|||||||
@ -24,6 +24,7 @@
|
|||||||
* \brief File of main public page for member module
|
* \brief File of main public page for member module
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../../main.inc.php';
|
require '../../main.inc.php';
|
||||||
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/company.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
|
||||||
@ -58,6 +59,7 @@ if ($action == 'update') {
|
|||||||
$public = GETPOST('MEMBER_ENABLE_PUBLIC');
|
$public = GETPOST('MEMBER_ENABLE_PUBLIC');
|
||||||
$amount = price2num(GETPOST('MEMBER_NEWFORM_AMOUNT'), 'MT', 2);
|
$amount = price2num(GETPOST('MEMBER_NEWFORM_AMOUNT'), 'MT', 2);
|
||||||
$editamount = GETPOST('MEMBER_NEWFORM_EDITAMOUNT');
|
$editamount = GETPOST('MEMBER_NEWFORM_EDITAMOUNT');
|
||||||
|
$publiccounters = GETPOST('MEMBER_COUNTERS_ARE_PUBLIC');
|
||||||
$payonline = GETPOST('MEMBER_NEWFORM_PAYONLINE');
|
$payonline = GETPOST('MEMBER_NEWFORM_PAYONLINE');
|
||||||
$forcetype = GETPOST('MEMBER_NEWFORM_FORCETYPE', 'int');
|
$forcetype = GETPOST('MEMBER_NEWFORM_FORCETYPE', 'int');
|
||||||
$forcemorphy = GETPOST('MEMBER_NEWFORM_FORCEMORPHY', 'aZ09');
|
$forcemorphy = GETPOST('MEMBER_NEWFORM_FORCEMORPHY', 'aZ09');
|
||||||
@ -65,6 +67,7 @@ if ($action == 'update') {
|
|||||||
$res = dolibarr_set_const($db, "MEMBER_ENABLE_PUBLIC", $public, 'chaine', 0, '', $conf->entity);
|
$res = dolibarr_set_const($db, "MEMBER_ENABLE_PUBLIC", $public, 'chaine', 0, '', $conf->entity);
|
||||||
$res = dolibarr_set_const($db, "MEMBER_NEWFORM_AMOUNT", $amount, 'chaine', 0, '', $conf->entity);
|
$res = dolibarr_set_const($db, "MEMBER_NEWFORM_AMOUNT", $amount, 'chaine', 0, '', $conf->entity);
|
||||||
$res = dolibarr_set_const($db, "MEMBER_NEWFORM_EDITAMOUNT", $editamount, 'chaine', 0, '', $conf->entity);
|
$res = dolibarr_set_const($db, "MEMBER_NEWFORM_EDITAMOUNT", $editamount, 'chaine', 0, '', $conf->entity);
|
||||||
|
$res = dolibarr_set_const($db, "MEMBER_COUNTERS_ARE_PUBLIC", $publiccounters, 'chaine', 0, '', $conf->entity);
|
||||||
$res = dolibarr_set_const($db, "MEMBER_NEWFORM_PAYONLINE", $payonline, 'chaine', 0, '', $conf->entity);
|
$res = dolibarr_set_const($db, "MEMBER_NEWFORM_PAYONLINE", $payonline, 'chaine', 0, '', $conf->entity);
|
||||||
if ($forcetype < 0) {
|
if ($forcetype < 0) {
|
||||||
$res = dolibarr_del_const($db, "MEMBER_NEWFORM_FORCETYPE", $conf->entity);
|
$res = dolibarr_del_const($db, "MEMBER_NEWFORM_FORCETYPE", $conf->entity);
|
||||||
@ -167,10 +170,30 @@ if (empty($conf->global->MEMBER_ENABLE_PUBLIC)) {
|
|||||||
print $enabledisablehtml;
|
print $enabledisablehtml;
|
||||||
print '<input type="hidden" id="MEMBER_ENABLE_PUBLIC" name="MEMBER_ENABLE_PUBLIC" value="'.(empty($conf->global->MEMBER_ENABLE_PUBLIC) ? 0 : 1).'">';
|
print '<input type="hidden" id="MEMBER_ENABLE_PUBLIC" name="MEMBER_ENABLE_PUBLIC" value="'.(empty($conf->global->MEMBER_ENABLE_PUBLIC) ? 0 : 1).'">';
|
||||||
|
|
||||||
|
print '<br><br>';
|
||||||
|
|
||||||
print '<br>';
|
|
||||||
|
|
||||||
if (!empty($conf->global->MEMBER_ENABLE_PUBLIC)) {
|
if (!empty($conf->global->MEMBER_ENABLE_PUBLIC)) {
|
||||||
|
print '<br>';
|
||||||
|
//print $langs->trans('FollowingLinksArePublic').'<br>';
|
||||||
|
print img_picto('', 'globe').' <span class="opacitymedium">'.$langs->trans('BlankSubscriptionForm').'</span><br>';
|
||||||
|
if (isModEnabled('multicompany')) {
|
||||||
|
$entity_qr = '?entity='.$conf->entity;
|
||||||
|
} else {
|
||||||
|
$entity_qr = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Define $urlwithroot
|
||||||
|
$urlwithouturlroot = preg_replace('/'.preg_quote(DOL_URL_ROOT, '/').'$/i', '', trim($dolibarr_main_url_root));
|
||||||
|
$urlwithroot = $urlwithouturlroot.DOL_URL_ROOT; // This is to use external domain name found into config file
|
||||||
|
//$urlwithroot=DOL_MAIN_URL_ROOT; // This is to use same domain name than current
|
||||||
|
|
||||||
|
print '<div class="urllink">';
|
||||||
|
print '<input type="text" id="publicurlmember" class="quatrevingtpercentminusx" value="'.$urlwithroot.'/public/members/new.php'.$entity_qr.'">';
|
||||||
|
print '<a target="_blank" rel="noopener noreferrer" href="'.$urlwithroot.'/public/members/new.php'.$entity_qr.'">'.img_picto('', 'globe', 'class="paddingleft"').'</a>';
|
||||||
|
print '</div>';
|
||||||
|
print ajax_autoselect('publicurlmember');
|
||||||
|
|
||||||
print '<br>';
|
print '<br>';
|
||||||
|
|
||||||
print '<div class="div-table-responsive-no-min">';
|
print '<div class="div-table-responsive-no-min">';
|
||||||
@ -216,6 +239,13 @@ if (!empty($conf->global->MEMBER_ENABLE_PUBLIC)) {
|
|||||||
print $form->selectyesno("MEMBER_NEWFORM_EDITAMOUNT", (!empty($conf->global->MEMBER_NEWFORM_EDITAMOUNT) ? $conf->global->MEMBER_NEWFORM_EDITAMOUNT : 0), 1);
|
print $form->selectyesno("MEMBER_NEWFORM_EDITAMOUNT", (!empty($conf->global->MEMBER_NEWFORM_EDITAMOUNT) ? $conf->global->MEMBER_NEWFORM_EDITAMOUNT : 0), 1);
|
||||||
print "</td></tr>\n";
|
print "</td></tr>\n";
|
||||||
|
|
||||||
|
// SHow counter of validated members publicly
|
||||||
|
print '<tr class="oddeven" id="tredit"><td>';
|
||||||
|
print $langs->trans("MemberCountersArePublic");
|
||||||
|
print '</td><td>';
|
||||||
|
print $form->selectyesno("MEMBER_COUNTERS_ARE_PUBLIC", (!empty($conf->global->MEMBER_COUNTERS_ARE_PUBLIC) ? $conf->global->MEMBER_COUNTERS_ARE_PUBLIC : 0), 1);
|
||||||
|
print "</td></tr>\n";
|
||||||
|
|
||||||
// Jump to an online payment page
|
// Jump to an online payment page
|
||||||
print '<tr class="oddeven" id="trpayment"><td>';
|
print '<tr class="oddeven" id="trpayment"><td>';
|
||||||
print $langs->trans("MEMBER_NEWFORM_PAYONLINE");
|
print $langs->trans("MEMBER_NEWFORM_PAYONLINE");
|
||||||
@ -223,13 +253,13 @@ if (!empty($conf->global->MEMBER_ENABLE_PUBLIC)) {
|
|||||||
$listofval = array();
|
$listofval = array();
|
||||||
$listofval['-1'] = $langs->trans('No');
|
$listofval['-1'] = $langs->trans('No');
|
||||||
$listofval['all'] = $langs->trans('Yes').' ('.$langs->trans("VisitorCanChooseItsPaymentMode").')';
|
$listofval['all'] = $langs->trans('Yes').' ('.$langs->trans("VisitorCanChooseItsPaymentMode").')';
|
||||||
if (!empty($conf->paybox->enabled)) {
|
if (isModEnabled('paybox')) {
|
||||||
$listofval['paybox'] = 'Paybox';
|
$listofval['paybox'] = 'Paybox';
|
||||||
}
|
}
|
||||||
if (!empty($conf->paypal->enabled)) {
|
if (isModEnabled('paypal')) {
|
||||||
$listofval['paypal'] = 'PayPal';
|
$listofval['paypal'] = 'PayPal';
|
||||||
}
|
}
|
||||||
if (!empty($conf->stripe->enabled)) {
|
if (isModEnabled('stripe')) {
|
||||||
$listofval['stripe'] = 'Stripe';
|
$listofval['stripe'] = 'Stripe';
|
||||||
}
|
}
|
||||||
print $form->selectarray("MEMBER_NEWFORM_PAYONLINE", $listofval, (!empty($conf->global->MEMBER_NEWFORM_PAYONLINE) ? $conf->global->MEMBER_NEWFORM_PAYONLINE : ''), 0);
|
print $form->selectarray("MEMBER_NEWFORM_PAYONLINE", $listofval, (!empty($conf->global->MEMBER_NEWFORM_PAYONLINE) ? $conf->global->MEMBER_NEWFORM_PAYONLINE : ''), 0);
|
||||||
@ -248,29 +278,6 @@ print dol_get_fiche_end();
|
|||||||
|
|
||||||
print '</form>';
|
print '</form>';
|
||||||
|
|
||||||
|
|
||||||
if (!empty($conf->global->MEMBER_ENABLE_PUBLIC)) {
|
|
||||||
print '<br>';
|
|
||||||
//print $langs->trans('FollowingLinksArePublic').'<br>';
|
|
||||||
print img_picto('', 'globe').' <span class="opacitymedium">'.$langs->trans('BlankSubscriptionForm').'</span><br>';
|
|
||||||
if (!empty($conf->multicompany->enabled)) {
|
|
||||||
$entity_qr = '?entity='.$conf->entity;
|
|
||||||
} else {
|
|
||||||
$entity_qr = '';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Define $urlwithroot
|
|
||||||
$urlwithouturlroot = preg_replace('/'.preg_quote(DOL_URL_ROOT, '/').'$/i', '', trim($dolibarr_main_url_root));
|
|
||||||
$urlwithroot = $urlwithouturlroot.DOL_URL_ROOT; // This is to use external domain name found into config file
|
|
||||||
//$urlwithroot=DOL_MAIN_URL_ROOT; // This is to use same domain name than current
|
|
||||||
|
|
||||||
print '<div class="urllink">';
|
|
||||||
print '<input type="text" id="publicurlmember" class="quatrevingtpercentminusx" value="'.$urlwithroot.'/public/members/new.php'.$entity_qr.'">';
|
|
||||||
print '<a target="_blank" rel="noopener noreferrer" href="'.$urlwithroot.'/public/members/new.php'.$entity_qr.'">'.img_picto('', 'globe', 'class="paddingleft"').'</a>';
|
|
||||||
print '</div>';
|
|
||||||
print ajax_autoselect('publicurlmember');
|
|
||||||
}
|
|
||||||
|
|
||||||
// End of page
|
// End of page
|
||||||
llxFooter();
|
llxFooter();
|
||||||
$db->close();
|
$db->close();
|
||||||
|
|||||||
@ -26,18 +26,21 @@
|
|||||||
* \brief Page of members events
|
* \brief Page of members events
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Load Dolibarr environment
|
||||||
require '../main.inc.php';
|
require '../main.inc.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
|
|
||||||
require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent_type.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/member.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/member.lib.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent_type.class.php';
|
|
||||||
|
|
||||||
// Load translation files required by the page
|
// Load translation files required by the page
|
||||||
$langs->loadLangs(array("companies", "members"));
|
$langs->loadLangs(array('companies', 'members'));
|
||||||
|
|
||||||
|
// Get Parameters
|
||||||
$id = GETPOST('id', 'int') ?GETPOST('id', 'int') : GETPOST('rowid', 'int');
|
$id = GETPOST('id', 'int') ?GETPOST('id', 'int') : GETPOST('rowid', 'int');
|
||||||
|
|
||||||
|
// Pagination
|
||||||
$limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit;
|
$limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit;
|
||||||
$sortfield = GETPOST('sortfield', 'aZ09comma');
|
$sortfield = GETPOST('sortfield', 'aZ09comma');
|
||||||
$sortorder = GETPOST('sortorder', 'aZ09comma');
|
$sortorder = GETPOST('sortorder', 'aZ09comma');
|
||||||
@ -71,6 +74,7 @@ $objcanvas = null;
|
|||||||
// Security check
|
// Security check
|
||||||
$result = restrictedArea($user, 'adherent', $id);
|
$result = restrictedArea($user, 'adherent', $id);
|
||||||
|
|
||||||
|
// Initialize technical objects
|
||||||
$object = new Adherent($db);
|
$object = new Adherent($db);
|
||||||
$result = $object->fetch($id);
|
$result = $object->fetch($id);
|
||||||
if ($result > 0) {
|
if ($result > 0) {
|
||||||
@ -115,9 +119,7 @@ $contactstatic = new Contact($db);
|
|||||||
|
|
||||||
$form = new Form($db);
|
$form = new Form($db);
|
||||||
|
|
||||||
/*
|
|
||||||
* Customer and/or supplier category sheet
|
|
||||||
*/
|
|
||||||
if ($object->id > 0) {
|
if ($object->id > 0) {
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php';
|
||||||
|
|||||||
@ -65,7 +65,7 @@ abstract class ActionsAdherentCardCommon
|
|||||||
|
|
||||||
/*if (is_object($this->object) && method_exists($this->object,'fetch'))
|
/*if (is_object($this->object) && method_exists($this->object,'fetch'))
|
||||||
{
|
{
|
||||||
if (! empty($id)) $this->object->fetch($id);
|
if (!empty($id)) $this->object->fetch($id);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{*/
|
{*/
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user