Merge remote-tracking branch 'upstream/develop' into 14a2
This commit is contained in:
commit
9f0434eb69
10
.github/CONTRIBUTING.md
vendored
10
.github/CONTRIBUTING.md
vendored
@ -4,13 +4,14 @@ How to contribute to Dolibarr
|
|||||||
Bug reports and feature requests
|
Bug reports and feature requests
|
||||||
--------------------------------
|
--------------------------------
|
||||||
|
|
||||||
<a name="not-a-support-forum"></a>*Note*: Issues are not a support forum. If you need help using the software, please use [the forums](https://www.dolibarr.org/forum).
|
<a name="not-a-support-forum"></a>*Note*: Issues are not a support forum. If you need help using the software, please use [the forums](https://www.dolibarr.org/forum.php). Forums exist in different languages.
|
||||||
|
|
||||||
Issues are managed on [GitHub](https://github.com/Dolibarr/dolibarr/issues).
|
Issues are managed on [GitHub](https://github.com/Dolibarr/dolibarr/issues).
|
||||||
|
Default language here is english. So please prepare your contributions in english.
|
||||||
|
|
||||||
1. Please [use the search engine](https://help.github.com/articles/searching-issues) to check if nobody's already reported your problem.
|
1. Please [use the search engine](https://help.github.com/articles/searching-issues) to check if nobody's already reported your problem.
|
||||||
2. [Create an issue](https://help.github.com/articles/creating-an-issue). Choose an appropriate title. Prepend appropriately with Bug or Feature Request.
|
2. [Create an issue](https://help.github.com/articles/creating-an-issue). Choose an appropriate title. Prepend appropriately with Bug or Feature Request.
|
||||||
4. Tell us the version you are using!
|
4. Tell us the version you are using! (look at /htdocs/admin/system/dolibarr.php? and check if you are using the latest version)
|
||||||
3. Write a report with as much detail as possible (Use [screenshots](https://help.github.com/articles/issue-attachments) or even screencasts and provide logging and debugging informations whenever possible).
|
3. Write a report with as much detail as possible (Use [screenshots](https://help.github.com/articles/issue-attachments) or even screencasts and provide logging and debugging informations whenever possible).
|
||||||
|
|
||||||
|
|
||||||
@ -26,7 +27,8 @@ Issues are managed on [GitHub](https://github.com/Dolibarr/dolibarr/issues).
|
|||||||
4. Commit and push your changes.
|
4. Commit and push your changes.
|
||||||
5. [Make a pull request](https://help.github.com/articles/creating-a-pull-request).
|
5. [Make a pull request](https://help.github.com/articles/creating-a-pull-request).
|
||||||
|
|
||||||
### <a name="branches"></a>Branches
|
<span id="branches" name="branches"></span>
|
||||||
|
### Branches
|
||||||
|
|
||||||
Unless you're fixing a bug, all pull requests should be made against the *develop* branch.
|
Unless you're fixing a bug, all pull requests should be made against the *develop* branch.
|
||||||
|
|
||||||
|
|||||||
4
.github/workflows/exakat.yml
vendored
4
.github/workflows/exakat.yml
vendored
@ -13,5 +13,5 @@ jobs:
|
|||||||
- name: Exakat
|
- name: Exakat
|
||||||
uses: docker://exakat/exakat-ga
|
uses: docker://exakat/exakat-ga
|
||||||
with:
|
with:
|
||||||
ignore_rules: 'Classes/UseInstanceof,Performances/PrePostIncrement,Functions/WrongNumberOfArguments,Variables/UndefinedVariable,Classes/DontUnsetProperties,Classes/NonPpp,Classes/StaticMethodsCalledFromObject,Classes/UseClassOperator,Functions/UsesDefaultArguments,Php/NoClassInGlobal,Php/ShouldUseCoalesce,Structures/MergeIfThen,Structures/ElseIfElseif,Structures/RepeatedPrint,Structures/UselessParenthesis,Structures/SwitchWithoutDefault,Structures/ShouldMakeTernary,Structures/UseConstant'
|
ignore_rules: 'Classes/UseInstanceof,Performances/PrePostIncrement,Functions/UndefinedFunctions,Functions/WrongNumberOfArguments,Functions/WrongTypeWithCall,Variables/UndefinedVariable,Classes/DontUnsetProperties,Classes/NonPpp,Classes/StaticMethodsCalledFromObject,Classes/UseClassOperator,Functions/UsesDefaultArguments,Php/NoClassInGlobal,Php/ShouldUseCoalesce,Php/WrongTypeForNativeFunction,Structures/AddZero,Structures/DropElseAfterReturn,Structures/IfWithSameConditions,Structures/MergeIfThen,Structures/ElseIfElseif,Structures/ExitUsage,Structures/RepeatedPrint,Structures/RepeatedRegex,Structures/SameConditions,Structures/SwitchWithoutDefault,Structures/ShouldMakeTernary,Structures/UselessParenthesis,Structures/UseConstant'
|
||||||
ignore_dirs: '/htdocs/includes,/htdocs/build,/htdocs/dev,/htdocs/doc,/htdocs/scripts,/htdocs/test'
|
ignore_dirs: '/htdocs/includes,/build,/dev,/doc,/scripts,/test'
|
||||||
70
.travis.yml
70
.travis.yml
@ -6,8 +6,6 @@
|
|||||||
os: linux
|
os: linux
|
||||||
dist: xenial
|
dist: xenial
|
||||||
#dist: bionic
|
#dist: bionic
|
||||||
# Deprecated: The key sudo has no effect anymore.
|
|
||||||
#sudo: required
|
|
||||||
|
|
||||||
language: php
|
language: php
|
||||||
|
|
||||||
@ -33,49 +31,28 @@ addons:
|
|||||||
# We need pgloader for import mysql database into pgsql
|
# We need pgloader for import mysql database into pgsql
|
||||||
- pgloader
|
- pgloader
|
||||||
|
|
||||||
php:
|
|
||||||
- '5.6'
|
|
||||||
- '7.4'
|
|
||||||
- nightly
|
|
||||||
|
|
||||||
env:
|
env:
|
||||||
global:
|
global:
|
||||||
# Set to true for very verbose output
|
# Set to true for very verbose output
|
||||||
- DEBUG=false
|
- DEBUG=false
|
||||||
jobs:
|
|
||||||
# MariaDB overrides MySQL installation so it's not possible to test both yet
|
|
||||||
#- DB=mariadb
|
|
||||||
- DB=mysql
|
|
||||||
- DB=postgresql
|
|
||||||
# See https://docs.travis-ci.com/user/languages/php/#Apache-%2B-PHP
|
|
||||||
#- WS=apache
|
|
||||||
# See https://github.com/DracoBlue/travis-ci-nginx-php-fpm-test
|
|
||||||
#- WS=nginx
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
fast_finish: true
|
fast_finish: true
|
||||||
allow_failures:
|
allow_failures:
|
||||||
- php: nightly
|
- php: nightly
|
||||||
# We exclude some combinations not usefull to save Travis CPU
|
include:
|
||||||
exclude:
|
- if: type = push
|
||||||
- php: '7.0'
|
php: '5.6'
|
||||||
env: DB=mysql
|
env: DB=postgresql
|
||||||
- php: '7.1'
|
- if: type = pull_request OR type = push
|
||||||
env: DB=mysql
|
php: '7.4'
|
||||||
- php: '7.2'
|
env: DB=mysql
|
||||||
env: DB=mysql
|
- if: type = push AND branch = develop
|
||||||
- php: '7.3'
|
php: nightly
|
||||||
env: DB=mysql
|
env: DB=mysql
|
||||||
- php: '7.0'
|
- if: type = push AND branch = 14.0
|
||||||
env: DB=postgresql
|
php: nightly
|
||||||
- php: '7.1'
|
env: DB=mysql
|
||||||
env: DB=postgresql
|
|
||||||
- php: '7.2'
|
|
||||||
env: DB=postgresql
|
|
||||||
- php: '7.3'
|
|
||||||
env: DB=postgresql
|
|
||||||
- php: nightly
|
|
||||||
env: DB=postgresql
|
|
||||||
|
|
||||||
notifications:
|
notifications:
|
||||||
email:
|
email:
|
||||||
@ -108,11 +85,11 @@ install:
|
|||||||
echo "Updating Composer"
|
echo "Updating Composer"
|
||||||
rm $TRAVIS_BUILD_DIR/composer.json
|
rm $TRAVIS_BUILD_DIR/composer.json
|
||||||
rm $TRAVIS_BUILD_DIR/composer.lock
|
rm $TRAVIS_BUILD_DIR/composer.lock
|
||||||
|
composer -V
|
||||||
composer self-update
|
composer self-update
|
||||||
# To have composer making parallel downloads
|
|
||||||
composer global require hirak/prestissimo
|
|
||||||
composer -n init
|
composer -n init
|
||||||
composer -n config vendor-dir htdocs/includes
|
composer -n config vendor-dir htdocs/includes
|
||||||
|
composer -n config -g vendor-dir htdocs/includes
|
||||||
echo
|
echo
|
||||||
|
|
||||||
- |
|
- |
|
||||||
@ -147,6 +124,9 @@ install:
|
|||||||
- |
|
- |
|
||||||
echo "Adding path of binaries tools installed by composer to the PATH"
|
echo "Adding path of binaries tools installed by composer to the PATH"
|
||||||
export PATH="$TRAVIS_BUILD_DIR/htdocs/includes/bin:$PATH"
|
export PATH="$TRAVIS_BUILD_DIR/htdocs/includes/bin:$PATH"
|
||||||
|
echo $PATH
|
||||||
|
ls $TRAVIS_BUILD_DIR/vendor
|
||||||
|
ls $TRAVIS_BUILD_DIR/htdocs/includes/bin
|
||||||
echo
|
echo
|
||||||
|
|
||||||
|
|
||||||
@ -177,7 +157,7 @@ before_script:
|
|||||||
# Check PHP
|
# Check PHP
|
||||||
echo "PHP version"
|
echo "PHP version"
|
||||||
php -i | head -
|
php -i | head -
|
||||||
# Check Parallel-lin version
|
# Check Parallel-lint version
|
||||||
echo "Parallel-lint version"
|
echo "Parallel-lint version"
|
||||||
which parallel-lint
|
which parallel-lint
|
||||||
parallel-lint -V
|
parallel-lint -V
|
||||||
@ -291,8 +271,8 @@ script:
|
|||||||
# Ensure we catch errors
|
# Ensure we catch errors
|
||||||
set -e
|
set -e
|
||||||
#parallel-lint --exclude htdocs/includes --blame .
|
#parallel-lint --exclude htdocs/includes --blame .
|
||||||
parallel-lint --exclude dev/namespacemig --exclude htdocs/includes/composer --exclude htdocs/includes/myclabs --exclude htdocs/includes/phpspec --exclude dev/initdata/dbf/includes \
|
parallel-lint --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/phpexcel --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 --blame .
|
||||||
@ -300,7 +280,7 @@ script:
|
|||||||
echo
|
echo
|
||||||
|
|
||||||
- |
|
- |
|
||||||
echo "Checking coding style (excluding Pull Requests builds to not overload travis, excluding also for some jobs to avoid duplicate tests)"
|
echo "Checking coding style (excluding Pull Requests builds to not overload travis, excluding also some jobs to avoid duplicate tests)"
|
||||||
# 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
|
||||||
@ -421,9 +401,13 @@ script:
|
|||||||
php upgrade.php 12.0.0 13.0.0 ignoredbversion > $TRAVIS_BUILD_DIR/upgrade12001300.log
|
php upgrade.php 12.0.0 13.0.0 ignoredbversion > $TRAVIS_BUILD_DIR/upgrade12001300.log
|
||||||
php upgrade2.php 12.0.0 13.0.0 > $TRAVIS_BUILD_DIR/upgrade12001300-2.log
|
php upgrade2.php 12.0.0 13.0.0 > $TRAVIS_BUILD_DIR/upgrade12001300-2.log
|
||||||
php step5.php 12.0.0 13.0.0 > $TRAVIS_BUILD_DIR/upgrade12001300-3.log
|
php step5.php 12.0.0 13.0.0 > $TRAVIS_BUILD_DIR/upgrade12001300-3.log
|
||||||
|
php upgrade.php 13.0.0 14.0.0 ignoredbversion > $TRAVIS_BUILD_DIR/upgrade13001400.log
|
||||||
|
php upgrade2.php 13.0.0 14.0.0 > $TRAVIS_BUILD_DIR/upgrade13001400-2.log
|
||||||
|
php step5.php 13.0.0 14.0.0 > $TRAVIS_BUILD_DIR/upgrade13001400-3.log
|
||||||
|
|
||||||
# Enable modules not enabled into original dump
|
# Enable modules not enabled into original dump
|
||||||
php upgrade2.php 0.0.0 0.0.0 MAIN_MODULE_API,MAIN_MODULE_SUPPLIERPROPOSAL,MAIN_MODULE_WEBSITE,MAIN_MODULE_TICKET,MAIN_MODULE_ACCOUNTING,MAIN_MODULE_MRP > $TRAVIS_BUILD_DIR/enablemodule.log
|
php upgrade2.php 0.0.0 0.0.0 MAIN_MODULE_API,MAIN_MODULE_PRODUCTBATCH,MAIN_MODULE_SUPPLIERPROPOSAL,MAIN_MODULE_WEBSITE,MAIN_MODULE_TICKET,MAIN_MODULE_ACCOUNTING,MAIN_MODULE_MRP > $TRAVIS_BUILD_DIR/enablemodule.log
|
||||||
|
php upgrade2.php 0.0.0 0.0.0 MAIN_MODULE_RECEPTION,MAIN_MODULE_RECRUITMENT > $TRAVIS_BUILD_DIR/enablemodule.log
|
||||||
echo $?
|
echo $?
|
||||||
cd -
|
cd -
|
||||||
set +e
|
set +e
|
||||||
|
|||||||
@ -23,14 +23,13 @@ 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
|
||||||
PHPExcel 1.8.1 LGPL-2.1+ Yes Read/Write XLS files, read ODS files
|
|
||||||
PHPSpreadSheet ? LGPL-2.1+ Yes Read/Write XLS files, read ODS files
|
PHPSpreadSheet ? LGPL-2.1+ Yes Read/Write XLS files, read ODS files
|
||||||
php-iban 1.4.7 LGPL-3+ Yes Parse and validate IBAN (and IIBAN) bank account information in PHP
|
php-iban 1.4.7 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 Library for logs (used by DebugBar)
|
PSR/Logs 1.0 Library for logs (used by DebugBar)
|
||||||
PSR/simple-cache ? Library for cache (used by PHPSpreadSheet)
|
PSR/simple-cache ? Library for cache (used by PHPSpreadSheet)
|
||||||
Restler 3.0.0RC6 LGPL-3+ Yes Library to develop REST Web services (+ swagger-ui js lib into dir explorer)
|
Restler 3.1.1 LGPL-3+ Yes Library to develop REST Web services (+ swagger-ui js lib into dir explorer)
|
||||||
Sabre 3.2.2 BSD Yes DAV support
|
Sabre 3.2.2 BSD Yes DAV support
|
||||||
Swift Mailer 5.4.2-DEV MIT license Yes Comprehensive mailing tools for PHP
|
Swift Mailer 5.4.2-DEV MIT license Yes Comprehensive mailing tools for PHP
|
||||||
Stripe 6.43.1 MIT licence Yes Library for Stripe module
|
Stripe 6.43.1 MIT licence Yes Library for Stripe module
|
||||||
@ -39,7 +38,7 @@ TCPDI 1.0.0 LGPL-3+ / Apache 2.0 Yes
|
|||||||
|
|
||||||
JS libraries:
|
JS libraries:
|
||||||
Ace 1.4.8 BSD Yes JS library to get code syntaxique coloration in a textarea.
|
Ace 1.4.8 BSD Yes JS library to get code syntaxique coloration in a textarea.
|
||||||
ChartJS 2.9.3 MIT License Yes JS library for graph
|
ChartJS 2.9.4 MIT License Yes JS library for graph
|
||||||
jQuery 3.5.1 MIT License Yes JS library
|
jQuery 3.5.1 MIT License Yes JS library
|
||||||
jQuery UI 1.12.1 GPL and MIT License Yes JS library plugin UI
|
jQuery UI 1.12.1 GPL and MIT License Yes JS library plugin UI
|
||||||
jQuery select2 4.0.13 GPL and Apache License Yes JS library plugin for sexier multiselect. Warning: 4.0.6+ create troubles without patching css
|
jQuery select2 4.0.13 GPL and Apache License Yes JS library plugin for sexier multiselect. Warning: 4.0.6+ create troubles without patching css
|
||||||
@ -53,7 +52,7 @@ jQuery jqueryFileTree 1.0.1 GPL and MIT License Yes
|
|||||||
jQuery jquerytreeview 1.4.1 MIT License Yes JS library for filetree
|
jQuery jquerytreeview 1.4.1 MIT License Yes JS library for filetree
|
||||||
jQuery TableDnD 0.6 GPL and MIT License Yes JS library plugin TableDnD (to reorder table rows)
|
jQuery TableDnD 0.6 GPL and MIT License Yes JS library plugin TableDnD (to reorder table rows)
|
||||||
jQuery Timepicker 1.1.0 GPL and MIT License Yes JS library Timepicker addon for Datepicker
|
jQuery Timepicker 1.1.0 GPL and MIT License Yes JS library Timepicker addon for Datepicker
|
||||||
jsGanttImproved 1.7.5.4 BSD License Yes JS library (to build Gantt reports)
|
jsGanttImproved 2.7.3 BSD License Yes JS library (to build Gantt reports)
|
||||||
JsTimezoneDetect 1.0.6 MIT License Yes JS library to detect user timezone
|
JsTimezoneDetect 1.0.6 MIT License Yes JS library to detect user timezone
|
||||||
SwaggerUI 2.0.24 GPL-2+ Yes JS library to offer the REST API explorer
|
SwaggerUI 2.0.24 GPL-2+ Yes JS library to offer the REST API explorer
|
||||||
|
|
||||||
|
|||||||
436
ChangeLog
436
ChangeLog
@ -4,153 +4,130 @@ English Dolibarr ChangeLog
|
|||||||
|
|
||||||
|
|
||||||
***** ChangeLog for 13.0.0 compared to 12.0.0 *****
|
***** ChangeLog for 13.0.0 compared to 12.0.0 *****
|
||||||
|
|
||||||
For users:
|
For users:
|
||||||
|
----------
|
||||||
NEW: Add module "Credit transfer SEPA" to manage payment of vendors using bank credit transfer SEPA files.
|
NEW: Add module "Credit transfer SEPA" to manage payment of vendors using bank credit transfer SEPA files.
|
||||||
NEW: Module Reception (for a more accurate management of your receptions) moved from experimental to stable.
|
NEW: Module Reception (for a more accurate management of your receptions) moved from experimental to stable.
|
||||||
|
NEW: Module Recruitment to manage Job position and applications.
|
||||||
NEW: Several security issues after a private bug bounty campaign.
|
NEW: Several security issues after a private bug bounty campaign.
|
||||||
NEW: #15065 Put the product label in bold in the PDF templates if configured
|
NEW: Accountancy - add chart of sub accounts
|
||||||
NEW: Accountancy - Add chart of sub accounts
|
NEW: Accountancy - add options to disable binding on sales, purchases & expense reports independently of the modules
|
||||||
NEW: Accountancy - Add options to disable binding on sales, purchases & expense reports independently of the modules
|
NEW: Accountancy balance - add a menu entry to show subtotal by group
|
||||||
NEW: Accountancy balance - Add a menu entry to show subtotal by group
|
NEW: Accountancy - change menu disposition
|
||||||
NEW: Accountancy - Move to real ledger, real journals, menu disposition
|
NEW: Accountancy - on transfers, select the periodicity by default
|
||||||
NEW: Accountancy - On transfers, select the periodicity by default
|
NEW: Accountancy - Add export for Gestinum (v3 & v5)
|
||||||
NEW: New currency rate editor.
|
NEW: new currency rate editor
|
||||||
NEW: Add 2 rules for emailcollector: Message send/not sent from Dolibarr
|
NEW: Solve blocking feature. Can increase stock of a Kit without changing subproduct stock.
|
||||||
NEW: Add a counter of number of words for pages in website module
|
NEW: add a widget to show the customers with outstanding limits reached
|
||||||
NEW: add alert before changing thirdparty in takepos
|
NEW: add 2 rules for emailcollector: Message send/not sent from Dolibarr
|
||||||
NEW: Add a page to list Stock at a given date in the past.
|
NEW: add a counter of number of words for pages in website module
|
||||||
NEW: Add a start date to begin binding in accountancy
|
NEW: add alert before changing thirdparty in TakePOS
|
||||||
NEW: Add a statistics page to list popularity of products on invoices
|
NEW: add a page to list Stock at a given date in the past
|
||||||
NEW: Add calendar selection for agenda view
|
NEW: add a start date to begin binding in accountancy
|
||||||
NEW: Support documents generation for ticket edition (pdf or odt)
|
NEW: add a statistics page to list popularity of products on invoices
|
||||||
NEW: Add column payment term into list of supplier invoices.
|
NEW: add calendar selection for agenda view
|
||||||
NEW: Add column quantity in product margin page
|
NEW: Support documents generation for ticket edition (PDF or ODT)
|
||||||
NEW: Add column vat rate in page to define accounting account on product/service
|
NEW: add column payment term into list of supplier invoices
|
||||||
NEW: Add common list function for available app/module page
|
NEW: add column quantity in product margin page
|
||||||
|
NEW: add column vat rate in page to define accounting account on product/service
|
||||||
NEW: add costprice in fields of products list
|
NEW: add costprice in fields of products list
|
||||||
NEW: Added an import profile for CUSTOMER ORDER, PO, PROPOSAL MODULE, SUPPLIER INVOICE
|
NEW: add an import profile for CUSTOMER ORDER, PO, PROPOSAL MODULE, SUPPLIER INVOICE
|
||||||
NEW: Added incoterms dara into the substitution array
|
NEW: add employee link in expense report binding page
|
||||||
NEW: Add employee link in expense report binding page
|
NEW: add EORI No. as ProfID5
|
||||||
NEW: Add export for various payment
|
NEW: add export for various payments
|
||||||
NEW: add extra fields labels and values in mail on create ticket
|
NEW: add Extrafields labels and values in mail on create ticket
|
||||||
NEW: Add extrafields support on ECM module
|
NEW: add Extrafields support on ECM module
|
||||||
NEW: Add filter rules "is answer" and "is not answer" in email collector
|
NEW: add filter rules "is answer" and "is not answer" in email collector
|
||||||
NEW: Add focus when editing on product/stock/product.php Close #14548
|
NEW: add focus when editing on product/stock/product.php Close #14548
|
||||||
NEW: add formConfirm hook on product page
|
|
||||||
NEW: add free text on each terminal of cash desk
|
NEW: add free text on each terminal of cash desk
|
||||||
NEW: Add function dolButtonToOpenUrlInDialogPopup() to be able to open
|
NEW: add global search for customer payments and vendor payments
|
||||||
NEW: Add global search for customer payments and vendor payments
|
NEW: add global search for miscellaneous payments
|
||||||
NEW: Add global search for miscellaneous payments
|
NEW: add helper function for table headers with numbers
|
||||||
NEW: Add helper function for table headers with numbers
|
NEW: add link to edit property from the search result of website pages
|
||||||
NEW: add hooks on stats pages
|
NEW: add link to reset qty on supplier dispatch page
|
||||||
NEW: Add link to edit property from search result of website pages
|
|
||||||
NEW: Add link to reset qty on supplier dispatch page
|
|
||||||
NEW: add MAIN_EMAILCOLLECTOR_MAIL_WITHOUT_HEADER const to remove header stored by email collector
|
NEW: add MAIN_EMAILCOLLECTOR_MAIL_WITHOUT_HEADER const to remove header stored by email collector
|
||||||
NEW: Add Manufacturing Orders attached files into the automatic ECM view
|
NEW: add Manufacturing Orders attached files into the automatic ECM view
|
||||||
NEW: add margin info in invoice list
|
NEW: add margin info in invoice list
|
||||||
NEW: Add mass action to set category on a list of website pages.
|
NEW: add mass action to set category on a list of website pages
|
||||||
NEW: Add mass deletion for events
|
NEW: add mass deletion for events
|
||||||
NEW: Add mass deletion for draft invoices
|
NEW: add mass deletion for draft invoices
|
||||||
NEW: Add __MEMBER_TYPE__ substitution key
|
NEW: add more filters on monthly statement list
|
||||||
NEW: Add a message in error_log after detection of SQL or script injection
|
NEW: add option TAKEPOS_CAN_FORCE_BANK_ACCOUNT_DURING_PAYMENT
|
||||||
NEW: Add module Credit transfer SEPA to manage payment of supplier using
|
NEW: add option to define a default warehouse at user level
|
||||||
NEW: Add more filters on monthly statement list
|
NEW: add option to include products without alert in replenish
|
||||||
NEW: Add option TAKEPOS_CAN_FORCE_BANK_ACCOUNT_DURING_PAYMENT
|
|
||||||
NEW: Add option to define a default warehouse at user level
|
|
||||||
NEW: Add option to include products without alert in replenish
|
|
||||||
NEW: add order by lastname and firstname by default in get sales representatives
|
NEW: add order by lastname and firstname by default in get sales representatives
|
||||||
NEW: Add param to not show links when output tags
|
NEW: add param to not show links when output tags
|
||||||
NEW: Add PDF document templates for warehouses (list of stock)
|
NEW: add PDF document templates for warehouses (list of stock)
|
||||||
NEW: Add property cssview when declaring fields of an object
|
NEW: add a prospect status for the contact with managment of custom icon
|
||||||
NEW: Add prospect status managment for the contact with managment of custom icon
|
NEW: add public note on products ; this also partially fix the #14342
|
||||||
NEW: Add public note on products. This also partially fix the #14342
|
NEW: add quick dropdown menu in top right menu (experimental with MAIN_USE_TOP_MENU_QUICKADD_DROPDOWN)
|
||||||
NEW: Add quick dropdown menu in top right menu (MAIN_USE_TOP_MENU_QUICKADD_DROPDOWN)
|
|
||||||
NEW: add region in export companies and contacts
|
NEW: add region in export companies and contacts
|
||||||
NEW: add rights on margin info on invoice list
|
NEW: add rights on margin info on invoice list
|
||||||
NEW: Add search param for close date on order list
|
NEW: add search param for close date on order list
|
||||||
NEW: add send context for ticket
|
NEW: add show preview for mail attachement on form mail
|
||||||
NEW: Add show preview for mail attachement on form mail
|
|
||||||
NEW: add state origin for product
|
|
||||||
NEW: add State/Province origin for products
|
NEW: add State/Province origin for products
|
||||||
NEW: Add the workflow interaction close intervention on closing ticket
|
NEW: add the workflow interaction close intervention on closing ticket
|
||||||
NEW: Add third order printer to TakePOS
|
NEW: add third order printer to TakePOS
|
||||||
NEW: add tracking number in list and search_all items
|
NEW: add tracking number in list and search_all items
|
||||||
NEW: add two hooks printFieldListFrom and printFieldSearchParam
|
NEW: add vcard for adherent and user
|
||||||
NEW: Add __TYPE__ substitution key
|
|
||||||
NEW: Add validation of MX domain for emails
|
|
||||||
NEW: add vcard for aderent and user
|
|
||||||
NEW: add week number for month view in agenda
|
NEW: add week number for month view in agenda
|
||||||
NEW: Algeria data (tva and forme_juridique)
|
NEW: Algeria data (VAT and forme_juridique)
|
||||||
NEW: Allow click on all header numbers on commerce area
|
NEW: allow click on all header numbers on commerce area
|
||||||
NEW: Allow to reopen interventions (green button)
|
NEW: allow to reopen interventions (green button)
|
||||||
NEW: Allow zero quality on supplier/vendor order line
|
NEW: allow zero quantity on supplier/vendor order line
|
||||||
NEW: Appearance tab in TakePOS with more visual parameters
|
NEW: appearance tab in TakePOS with more visual parameters
|
||||||
NEW: Better currency rate editor
|
NEW: better currency rate editor
|
||||||
NEW: Calculate the virtual stock in transverse mode ( not on getEntity('commande'), ... but on getEntity('stock') )
|
NEW: can build vendor invoice from vendor orders
|
||||||
NEW: Can add event to log into blockedlog module with a constant.
|
NEW: can change a product in lines of a recurring invoice or contract
|
||||||
NEW: Can build vendor invoice from vendor orders
|
NEW: can change size of logo on PDF documents
|
||||||
NEW: Can change a product in line of recurring invoice or contract
|
NEW: can change VAT rate of all lines of a draft object in one step
|
||||||
NEW: Can change size of logo on PDF documents
|
NEW: can define date range of validity of a login during creation
|
||||||
NEW: Can change VAT rate of all lines of a draft object in one step.
|
NEW: can disable, from edit page, the whole web site
|
||||||
NEW: Can define date range of validity of a login during creation
|
|
||||||
NEW: Can disable, from edit page, the whole web site
|
|
||||||
NEW: can edit and set sales representatives directly on thirdparty card
|
NEW: can edit and set sales representatives directly on thirdparty card
|
||||||
NEW: Can edit the list of sending email profiles.
|
NEW: can edit the list of sending email profiles
|
||||||
NEW: Can enable/disable users in bulk actions
|
NEW: can enable/disable users in bulk actions
|
||||||
NEW: Can filter on accounting system ref in export of chart of account
|
NEW: can filter on accounting system ref in export of chart of account
|
||||||
NEW: Can filter on container type, language and tags in the list of pages
|
NEW: can filter on container type, language and tags in the list of web pages
|
||||||
NEW: Can force the antivirus from conf file or autoprepend ini setup.
|
NEW: can hide eatby, sellby dates with option PRODUCT_DISABLE_SELLBY and PRODUCT_DISABLE_EATBY
|
||||||
NEW: Can hide eatby, sellby dates with option PRODUCT_DISABLE_SELLBY and PRODUCT_DISABLE_EATBY
|
NEW: can import proposals, sales orders, supplier invoices
|
||||||
NEW: Can import proposals, sales orders, supplier invoices
|
|
||||||
NEW: can set a dedicated SMTP config for sending email from public ticket interface
|
NEW: can set a dedicated SMTP config for sending email from public ticket interface
|
||||||
NEW: Can set tags/categories to website pages.
|
NEW: can set tags/categories to website pages
|
||||||
NEW: Can set type of price without tax per default for new sale price creation
|
NEW: can set type of price without tax per default for new sale price creation
|
||||||
NEW: Can use desired stock of a given warehouse for replenishment
|
NEW: can use desired stock of a given warehouse for replenishment
|
||||||
NEW: Can use THEME_DARKMODEENABLED=2 for a preview of theme in dark mode
|
NEW: change thirdparty with barcode scan in TakePOS
|
||||||
NEW: change thirdparty with barcode scan in takepos
|
NEW: common behavior for monthly leave list view
|
||||||
NEW: Common behavior for monthly leave list view
|
|
||||||
NEW: conf to allow show full arbo in warehouse getnomurl
|
|
||||||
NEW: convert all subscription in datetime
|
NEW: convert all subscription in datetime
|
||||||
NEW: create thirdparty customer from TAKEPOS
|
NEW: can create a thirdparty customer from TakePOS
|
||||||
NEW: Date shipment from order accepts hours
|
NEW: date shipment from order accepts hours
|
||||||
NEW: Declinaison price level compatibility
|
NEW: price level compatibility for variant
|
||||||
NEW: Delayed payment in TakePOS
|
NEW: delayed payment in TakePOS
|
||||||
NEW: Development of module Recruitment
|
NEW: display date range if exist in TakePOS
|
||||||
NEW: display date range if exist in takepos
|
NEW: display resiliate status in TakePOS for member
|
||||||
NEW: display resiliate status in takepos for member
|
|
||||||
NEW: display stat for BOM on "object referent"/linked Object product tab
|
NEW: display stat for BOM on "object referent"/linked Object product tab
|
||||||
NEW: edit and update a ticket
|
NEW: Email configuration - allow auto signed certificate when smtp ssl activated
|
||||||
NEW: edit or delete dispatched lines
|
|
||||||
NEW: Email configuration - Allow auto signed certificat when smtp ssl activated
|
|
||||||
NEW: enable free emails input with select2
|
NEW: enable free emails input with select2
|
||||||
NEW: endpoint getContacts and Clean results
|
|
||||||
NEW: Events in agenda for contact
|
NEW: Events in agenda for contact
|
||||||
NEW: Field to link website page to an other object
|
|
||||||
NEW: Fill ECM src object fields in dol_add_file_process
|
|
||||||
NEW: filter on progress column in task list
|
NEW: filter on progress column in task list
|
||||||
NEW: filter product list by country and/or state/province
|
NEW: filter product list by country and/or state/province
|
||||||
NEW: format tickets sent by mail in public interface
|
NEW: format tickets sent by mail in public interface
|
||||||
NEW: add juridical status for Algeria
|
|
||||||
NEW: form to add customer/supplier into categories
|
NEW: form to add customer/supplier into categories
|
||||||
NEW: Framework is ready for CSRF token protection on explicit GET URLs.
|
NEW: Framework is ready for CSRF token protection on explicit GET URLs
|
||||||
NEW: get all child recursively
|
|
||||||
NEW: Get contacts list of a given order
|
|
||||||
NEW: helper functions for export with phpspreadsheet
|
NEW: helper functions for export with phpspreadsheet
|
||||||
NEW: hide closed contract lines
|
NEW: hide closed contract lines
|
||||||
NEW: hide label in pdf for variants
|
NEW: hide label in PDF for variants
|
||||||
NEW: Hook on propal card
|
NEW: if specific help page is available, we change color of icon
|
||||||
NEW: If specific help page is available, we change color of icon
|
NEW: include the tag editor of page as a popup into website editor
|
||||||
NEW: Include the tag editor of page as a popup into website editor
|
NEW: introduce constant FACTUREFOURN_REUSE_NOTES_ON_CREATE_FROM
|
||||||
NEW: Introduce constant FACTUREFOURN_REUSE_NOTES_ON_CREATE_FROM
|
NEW: introducing new modal boxes in TakePOS
|
||||||
NEW: Introducing new modal boxes in TakePOS
|
NEW: keep TakePOS terminal when login/logout
|
||||||
NEW: Keep takepos terminal when login/logout
|
NEW: link on balance to the ledger
|
||||||
NEW: Link on balance to the ledger
|
|
||||||
NEW: MAIN_EMAILCOLLECTOR_MAIL_WITHOUT_HEADER const in email collector
|
NEW: MAIN_EMAILCOLLECTOR_MAIL_WITHOUT_HEADER const in email collector
|
||||||
NEW: manage errors on update extra fields in ticket card
|
NEW: manage errors on update extra fields in ticket card
|
||||||
NEW: mass-actions for the event list view
|
NEW: mass-actions for the event list view
|
||||||
NEW: Module Intracomm report
|
NEW: Module Intracomm report
|
||||||
NEW: More filter for "View change logs"
|
NEW: more filter for "View change logs"
|
||||||
NEW: multicurrency total in takepos
|
NEW: multicurrency total in TakePOS
|
||||||
NEW: multiselect type and date to date filter
|
NEW: multiselect type and date to date filter
|
||||||
NEW: Nature of product is now a dictionay
|
NEW: Nature of product is now a dictionay
|
||||||
NEW: new line template: hidden conf to fill service dates from the last service line
|
NEW: new line template: hidden conf to fill service dates from the last service line
|
||||||
@ -159,71 +136,99 @@ NEW: possibilty to group payments by mode and show their subtotal
|
|||||||
NEW: Print payment method and change in TakePOS
|
NEW: Print payment method and change in TakePOS
|
||||||
NEW: Priority and transparency from external calendar events
|
NEW: Priority and transparency from external calendar events
|
||||||
NEW: Products Import/Export 'default warehouse' and 'use batch number' fields
|
NEW: Products Import/Export 'default warehouse' and 'use batch number' fields
|
||||||
NEW: Purchase price table: Added filterable table columns
|
NEW: Purchase price table: added filterable table columns
|
||||||
NEW: rate editor for multicurrency
|
NEW: rate editor for multicurrency
|
||||||
NEW: ref_ext field for Commande lines, order lines, Attributes and Combinations, Invoice lines, payments, order lines
|
NEW: ref_ext field for Commande lines, order lines, Attributes and Combinations, Invoice lines, payments, order lines
|
||||||
NEW: remove new lines in mail on add ticket message
|
NEW: remove new lines in mail on add ticket message
|
||||||
NEW: restrict thirdparty to customer in takepos
|
NEW: restrict thirdparty to customer in TakePOS
|
||||||
NEW: Allow to edit "demand reason" field though API
|
|
||||||
NEW: Rule "email to" accept wildcard *
|
NEW: Rule "email to" accept wildcard *
|
||||||
NEW: Save filter of the project homepage
|
NEW: Save filter of the project homepage
|
||||||
NEW: Select-able columns on customer invoice paymnet list
|
NEW: select-able columns on customer and supplier invoice paymnet list
|
||||||
NEW: Select-able columns on miscellaneous payments + more data columns
|
NEW: select-able columns on miscellaneous payments + more data columns
|
||||||
NEW: Select-able columns on social taxes list
|
NEW: select-able columns on social taxes list
|
||||||
NEW: Select-able columns on supplier invoice payment list
|
|
||||||
NEW: send context and remove new lines on create ticket
|
NEW: send context and remove new lines on create ticket
|
||||||
NEW: set entity when creating invoice on takepos
|
NEW: show available stock in TakePOS
|
||||||
NEW: Show available stock in TakePOS
|
NEW: show category filter on lists only when user have rights to read categories
|
||||||
NEW: Show category filter on lists only when user have rights to read categories
|
NEW: show header number and make it clickable in warehouse area, payment area, shipment area
|
||||||
NEW: Show header number and make it clickable in warehouse arean, payment area, shipment area
|
NEW: show image of user in the combo select of users
|
||||||
NEW: Show image of user in the combo select of users
|
NEW: show label on batch card
|
||||||
NEW: Show label on batch card
|
|
||||||
NEW: Show line number on intervention card (via MAIN_VIEW_LINE_NUMBER)
|
|
||||||
NEW: show links for select and multi-select in category extra field
|
NEW: show links for select and multi-select in category extra field
|
||||||
NEW: Show module and permission ids on user/group rights (only admin)
|
NEW: show module and permission ids on user/group rights (only admin)
|
||||||
NEW: Show place from events on import calender
|
NEW: show place from events on import calender
|
||||||
NEW: Show references in contract form on interventions
|
NEW: show references in contract form on interventions
|
||||||
NEW: Show tags and status in search list of website pages
|
NEW: show tags and status in search list of website pages
|
||||||
NEW: Show user on external calender events (when found)
|
NEW: show user on external calender events (when found)
|
||||||
NEW: subject title with company name instead of application title in ticket message
|
NEW: subject title with company name instead of application title in ticket message
|
||||||
NEW: Support for Samba4 AD
|
NEW: Support for Samba4 AD
|
||||||
NEW: TakePOS connector compatibility with RECEIPT PRINTERS module
|
NEW: TakePOS connector compatibility with RECEIPT PRINTERS module
|
||||||
NEW: TakePOS Gift Receipt
|
NEW: TakePOS Gift Receipt
|
||||||
NEW: TakePOS Multicurrency compatibility
|
NEW: TakePOS Multicurrency compatibility
|
||||||
NEW: The global header of a website can also have dynamic content
|
NEW: the global header of a website can also have dynamic content
|
||||||
NEW: Third-Party Import new fields: mother company,outstanding debt limit,bank account,incoterms
|
NEW: Third-Party Import new fields: mother company,outstanding debt limit,bank account,incoterms
|
||||||
NEW: Thirdparty module : box on customer/supplier tab for invoice outsantding amount late
|
NEW: Thirdparty module : box on customer/supplier tab for invoice outsantding amount late
|
||||||
NEW: ticket classification on create from email collector
|
NEW: ticket classification on create from email collector
|
||||||
NEW: Ticket message notifications when edited from public interface
|
NEW: Ticket message notifications when edited from public interface
|
||||||
NEW: translate classification labels in ticket
|
NEW: translate classification labels in ticket
|
||||||
NEW: triggers create, modify, delete
|
NEW: VAT rate for Angola #15606
|
||||||
NEW: VAT for Algeria
|
NEW: VAT and juridical status for Algeria
|
||||||
NEW: Use preselect third-party from list on new card
|
NEW: VAT report - Invert constant to show by default zero VAT in reports
|
||||||
NEW: Vat report - Invert constant to show by default zero vat in reports
|
|
||||||
NEW: website page fields selection
|
NEW: website page fields selection
|
||||||
NEW: Weighing Scale compatibility with TakePOS connector
|
NEW: Weighing Scale compatibility with TakePOS connector
|
||||||
NEW: When creating a user from a member linked to a thirdparty, you can choose to create if as external or internal user
|
NEW: when creating a user from a member linked to a thirdparty, you can choose to create it as external or internal user
|
||||||
NEW: Add clone functionality on miscellaneous payment
|
NEW: add clone button on miscellaneous payment
|
||||||
|
NEW: #15065 Add option to put the product label in bold in the PDF templates if configured
|
||||||
|
NEW: Add option "If the feature to manage kits of module Stock is used, show details of subproducts of a kit on PDF."
|
||||||
|
|
||||||
|
|
||||||
For developers:
|
For developers:
|
||||||
NEW: Can use dynamic code into the 'enabled' property of DAO fields
|
---------------
|
||||||
NEW: API Can update a payment
|
NEW: add substitution key __MEMBER_TYPE__
|
||||||
NEW: api get member by thirdparty
|
NEW: add substitution key __TYPE__
|
||||||
|
NEW: add function dolButtonToOpenUrlInDialogPopup() to be able to open page into a popup
|
||||||
|
NEW: show line number on intervention card (via MAIN_VIEW_LINE_NUMBER)
|
||||||
|
NEW: Add some fields to link website page to an other object
|
||||||
|
NEW: fill ECM src object fields in dol_add_file_process
|
||||||
|
NEW: conf to allow to show the full tree in warehouse popup
|
||||||
|
NEW: can use THEME_DARKMODEENABLED=2 for a preview of theme in dark mode
|
||||||
|
NEW: can force the antivirus from conf file or autoprepend ini setup
|
||||||
|
NEW: can add event to log into blockedlog module with a constant
|
||||||
|
NEW: add property cssview when declaring fields of an object
|
||||||
|
NEW: can use dynamic code into the 'enabled' property of DAO fields
|
||||||
|
NEW: field ref_ext in llx_commandedet
|
||||||
|
NEW: field ref_ext for Attributes and Combinations
|
||||||
|
NEW: OAuth SCOPE for Admin SDK
|
||||||
|
NEW: retrieve discount from invoice from API
|
||||||
|
NEW: standardizes API thirdparties by email like other object
|
||||||
|
NEW: Thirdparty REST API: endpoint to set price level
|
||||||
|
NEW: use new category API for project list view
|
||||||
|
NEW: Triggers Attributes and Attributes values
|
||||||
|
NEW: added incoterms data into the substitution array
|
||||||
|
NEW: add send context for ticket
|
||||||
|
NEW: add a message in error_log after detection of SQL or script injection
|
||||||
|
NEW: add validation of MX domain for emails
|
||||||
|
NEW: calculate the virtual stock in transverse mode ( not on getEntity('commande'), ... but on getEntity('stock') )
|
||||||
|
NEW: Graphics can be horizontal bars
|
||||||
|
|
||||||
|
APIs
|
||||||
|
NEW: API get contacts list of a given order
|
||||||
|
NEW: API endpoint getContacts and Clean results
|
||||||
|
NEW: API can update a payment
|
||||||
|
NEW: API get member by thirdparty
|
||||||
NEW: API get thirdparty by barcode
|
NEW: API get thirdparty by barcode
|
||||||
NEW: API get users by email / login
|
NEW: API get users by email / login
|
||||||
|
NEW: allow to edit field "demand reason" through API
|
||||||
NEW: fetch contact by email with REST API
|
NEW: fetch contact by email with REST API
|
||||||
NEW: field ref_ext in llx_commandedet
|
|
||||||
NEW: fields ref_ext for Attributes and Combinations
|
|
||||||
NEW: get state by REST API
|
NEW: get state by REST API
|
||||||
NEW: get state dictionnary by REST API
|
NEW: get state dictionary by REST API
|
||||||
NEW: Improve Product API for variant products
|
NEW: improve Product API for product variants
|
||||||
NEW: Oauth SCOPE for Admin SDK
|
|
||||||
NEW: Retrieve discount from invoice from API
|
HOOKs
|
||||||
NEW: standardizes API thirdparties by email like other object
|
NEW: Hook on propal card
|
||||||
NEW: thirdparty REST API: endpoint to set price level
|
NEW: add hooks on newpayment page to allow external payment modules
|
||||||
NEW: Use new category API for project list view
|
NEW: add hooks on stats pages
|
||||||
NEW: Triggers Attributes and Attributes values
|
NEW: add formConfirm hook on product page
|
||||||
NEW: Add hooks on newpayment page to allow external payment modules
|
NEW: add two hooks printFieldListFrom and printFieldSearchParam
|
||||||
|
NEW: add hook "loginCheckSecurityAccess"
|
||||||
|
|
||||||
WARNING:
|
WARNING:
|
||||||
|
|
||||||
@ -242,8 +247,106 @@ Following changes may create regressions for some external modules, but were nec
|
|||||||
* The API addPayment for api_invoice has evolved to accept amount into a foreign currency. You must provide array(amount=>X,mutlicurrency_ammount=>Y) instead of simple amount.
|
* The API addPayment for api_invoice has evolved to accept amount into a foreign currency. You must provide array(amount=>X,mutlicurrency_ammount=>Y) instead of simple amount.
|
||||||
* The method select_thirdparty(), deprecated since 3.8, into html.form.class.php has been removed.
|
* The method select_thirdparty(), deprecated since 3.8, into html.form.class.php has been removed.
|
||||||
* Depreciate all methods with name ->valide(). Use instead methods ->validate().
|
* Depreciate all methods with name ->valide(). Use instead methods ->validate().
|
||||||
|
* Function showStripePaymentUrl, getStripePaymentUrl, showPaypalPaymentUrl and getPaypalPaymentUrl has been removed. The generic one showOnlinePaymentUrl and getOnlinePaymentUrl are always used.
|
||||||
|
* Context for hook showSocinfoOnPrint has been moved from "showsocinfoonprint" to "main"
|
||||||
|
* Library htdocs/includes/phpoffice/phpexcel as been removed (replaced with htdocs/includes/phpoffice/PhpSpreadsheet)
|
||||||
|
|
||||||
|
|
||||||
|
***** ChangeLog for 12.0.4 compared to 12.0.3 *****
|
||||||
|
FIX: make formConfirm an addreplace-type hook
|
||||||
|
FIX: regex to remove 'action' parameter: taking feedback from PR#15213 into account
|
||||||
|
FIX: remove 'action' parameter from redirect URL when reordering lines on a document
|
||||||
|
FIX: error when displaying lines on order after adding a line if both MAIN_MULTILANGS and MAIN_DISABLE_PDF_AUTOUPDATE are activated
|
||||||
|
FIX: on survey creation, entity is always set to 1 ⇒ set it to $conf->entity
|
||||||
|
FIX: set entity to $conf->entity (instead of 1 by default) when creating a survey; otherwise the survey cannot be listed from the entity it was created on unless it is the main entity
|
||||||
|
FIX: the stringent XSS protection provided by 'alphanohtml' causes problems with some clients who used basic tags (bold, italic, underline) in product labels. Using 'restricthtml' instead could be a good compromise.
|
||||||
|
FIX: third party of object is not always fetched when initiating the e-mail presend action (e.g. from an order)
|
||||||
|
FIX: when the cronjob 'params' field is empty, the cron method is called with one empty string param instead of no params at all
|
||||||
|
FIX: XSS protection too stringent -> replace 'alphanohtml' with 'restricthtml'
|
||||||
|
FIX: #13067 including opening balance in calculation of displayed balance
|
||||||
|
FIX: #14326
|
||||||
|
FIX: #14649
|
||||||
|
FIX: #14901
|
||||||
|
FIX: #14927 Change ContratLigne property type to product_type
|
||||||
|
FIX: #14979
|
||||||
|
FIX: #15074
|
||||||
|
FIX: #15111 Fix special characters output in PDF
|
||||||
|
FIX: #15161 MO translation conflict
|
||||||
|
FIX: #15163
|
||||||
|
FIX: #15199
|
||||||
|
FIX: #15208
|
||||||
|
FIX: #15303
|
||||||
|
FIX: #15365 export of extrafields for user and resources
|
||||||
|
FIX: #15374 : "New" doesn't clear total amounts
|
||||||
|
FIX: #15501
|
||||||
|
FIX: #15572
|
||||||
|
FIX: #15590
|
||||||
|
FIX: #15618
|
||||||
|
FIX: supplier proposals as linked objects of events are not correctly fetched
|
||||||
|
FIX: when users create an event from a supplier proposal, the "linked objects" section says "Deleted"
|
||||||
|
FIX: Accountancy - Some ajustments on length of the account (general & auxiliary)
|
||||||
|
FIX: admin conf selected
|
||||||
|
FIX: also check if there is a method $object->fetch_thirdparty() before calling it
|
||||||
|
FIX: autofocus on first setup
|
||||||
|
FIX: Bad rigths to send contract
|
||||||
|
FIX: Better error message with IMAP when connection fails
|
||||||
|
FIX: Can create user but not update user with activedirectory
|
||||||
|
FIX: Can receipt of a product that required lot after disabling stock and
|
||||||
|
FIX: Can't create shipment for virtual product. Add
|
||||||
|
FIX: cant empty action comm desc
|
||||||
|
FIX: CA report by product/service : subcategory filter
|
||||||
|
FIX: Clean orphan records in llx_ecm_files into repair script.
|
||||||
|
FIX: default accountancy values and posted values
|
||||||
|
FIX: Deletion of expensereport + other generated object not complete.
|
||||||
|
FIX: disabled users must not be available in sales representative list on societe edit mode
|
||||||
|
FIX: Dol print error : conf usage thirdparty propagate extrafields to
|
||||||
|
FIX: Don't display inactive users in birthday box and company card
|
||||||
|
FIX: empty value is needed on filter list
|
||||||
|
FIX: enable HTML in product labels depending on conf MAIN_SECURITY_ALLOW_UNSECURED_LABELS_WITH_HTML
|
||||||
|
FIX: error 500 on cash closure
|
||||||
|
FIX: excess comma
|
||||||
|
FIX: Export FEC - Remove line at zero
|
||||||
|
FIX: extrafield required error after submit
|
||||||
|
FIX: filter on project list
|
||||||
|
FIX: force payment mode to withdraw
|
||||||
|
FIX: formating of prices with foreign languages
|
||||||
|
FIX: handling $heightforinfotot when he's superior to a page height
|
||||||
|
FIX: if no PDF default model in admin for expense report, do not create a PDF
|
||||||
|
FIX: invoice payment terms edition: error management
|
||||||
|
FIX: list of fields in list of recurring invoices was empty
|
||||||
|
FIX: load default linked options for linked sellist extra fields
|
||||||
|
FIX: Loan - Return on list when you cancel create form or delete a loan
|
||||||
|
FIX: Missing lang trans
|
||||||
|
FIX: no empty value in required extrafield
|
||||||
|
FIX: Param joinfiles not sanitized
|
||||||
|
FIX: Payment by BankTransfer
|
||||||
|
FIX: pdf_getlinetotalwithtax must show total incl tax
|
||||||
|
FIX: Problem on supplier payment card
|
||||||
|
FIX: product auto volume calculation
|
||||||
|
FIX: product customer prices: missing triggers in CRUD class
|
||||||
|
FIX: Request on purchase orders in timeout even on very small databases
|
||||||
|
FIX: set paid on total discount of a product in cash desk
|
||||||
|
FIX: several warning with the barcode use in ODT templates
|
||||||
|
FIX: SHIP MODE install v12 bug insert
|
||||||
|
FIX: stripe for connect mode
|
||||||
|
FIX: subcat filter
|
||||||
|
FIX: supplier invoice: automatically calculate payment term when modifying payment condition
|
||||||
|
FIX: SUPPLIER PROPOSAL v12 bug add
|
||||||
|
FIX: table making extrafield input too small on advance target mailing
|
||||||
|
FIX: table making extrafield too small advtagertmailing
|
||||||
|
FIX: Unable to edit extrafields in expense report
|
||||||
|
FIX: update margins rates on object line edit
|
||||||
|
FIX: uses price2numjs
|
||||||
|
FIX: various payments: bad data handling for subledger account + useless db commit/rollback
|
||||||
|
FIX: virtual products: displayed value is by unit
|
||||||
|
FIX: virtual products: supplier discount was not applied in component list
|
||||||
|
FIX: warning for purchase order delivery late.
|
||||||
|
FIX: Warning on late purchase order delivery
|
||||||
|
FIX: WORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING must not consider services while STOCK_SUPPORTS_SERVICES is empty
|
||||||
|
FIX: wrong tab
|
||||||
|
FIX: Yogosha report 4425 (backport)
|
||||||
|
FIX: Yogosha report 4434 (backport)
|
||||||
|
|
||||||
***** ChangeLog for 12.0.3 compared to 12.0.2 *****
|
***** ChangeLog for 12.0.3 compared to 12.0.2 *****
|
||||||
FIX: 10.0 - when the mime file name is different from the filesystem name, the attachment name should be the mime filename
|
FIX: 10.0 - when the mime file name is different from the filesystem name, the attachment name should be the mime filename
|
||||||
FIX: 11.0 - expenses lines overlapping the total amounts frame
|
FIX: 11.0 - expenses lines overlapping the total amounts frame
|
||||||
@ -270,7 +373,7 @@ FIX: Look and feel v12: First tab must be name of object
|
|||||||
FIX: missing entity check
|
FIX: missing entity check
|
||||||
FIX: missing param for hook
|
FIX: missing param for hook
|
||||||
FIX: Missing transaction on PO actions
|
FIX: Missing transaction on PO actions
|
||||||
FIX: MySql Strict mode
|
FIX: MySQL Strict mode
|
||||||
FIX: param entity in html form file
|
FIX: param entity in html form file
|
||||||
FIX: Problems on FEC format
|
FIX: Problems on FEC format
|
||||||
FIX: round stock value on product list
|
FIX: round stock value on product list
|
||||||
@ -289,6 +392,7 @@ FIX: Visualization rights correction on last modified contacts box
|
|||||||
FIX: Wrong redirection
|
FIX: Wrong redirection
|
||||||
FIX: Yogosha report 4425 (backport)
|
FIX: Yogosha report 4425 (backport)
|
||||||
|
|
||||||
|
|
||||||
***** ChangeLog for 12.0.2 compared to 12.0.1 *****
|
***** ChangeLog for 12.0.2 compared to 12.0.1 *****
|
||||||
FIX: computation of the bottom margin of <body> returns NaN because body is not loaded yet
|
FIX: computation of the bottom margin of <body> returns NaN because body is not loaded yet
|
||||||
FIX: DebugBar hides content at page bottom
|
FIX: DebugBar hides content at page bottom
|
||||||
@ -377,8 +481,8 @@ FIX: SQL Problem in customer invoice list
|
|||||||
FIX: SQL Problem in social contribution list
|
FIX: SQL Problem in social contribution list
|
||||||
FIX: SQL Problem in supplier invoice list
|
FIX: SQL Problem in supplier invoice list
|
||||||
FIX: SQL syntax error when editing extrafields
|
FIX: SQL syntax error when editing extrafields
|
||||||
FIX: Sql type
|
FIX: SQL type
|
||||||
FIX: takepos 12 hook
|
FIX: TakePOS 12 hook
|
||||||
FIX: Update form erased extrafields that were hidden
|
FIX: Update form erased extrafields that were hidden
|
||||||
FIX: Update of extrafields date
|
FIX: Update of extrafields date
|
||||||
FIX: Update of extrafiels on draft object
|
FIX: Update of extrafiels on draft object
|
||||||
@ -392,7 +496,7 @@ For users:
|
|||||||
|
|
||||||
NEW: Module MO (Manufacturing Order) is available as stable module.
|
NEW: Module MO (Manufacturing Order) is available as stable module.
|
||||||
NEW: Receipt printer module moved from 'development' to 'experimental'
|
NEW: Receipt printer module moved from 'development' to 'experimental'
|
||||||
NEW: Add option MAIN_VIEW_LINE_NUMBER_IN_LIST for some lists.
|
NEW: add option MAIN_VIEW_LINE_NUMBER_IN_LIST for some lists
|
||||||
NEW: add numbering module for TakePOS module
|
NEW: add numbering module for TakePOS module
|
||||||
NEW: 2 new options when creating an invoice from time spent on a project : by period or by task
|
NEW: 2 new options when creating an invoice from time spent on a project : by period or by task
|
||||||
NEW: Accountancy add column thirdparty on binding page
|
NEW: Accountancy add column thirdparty on binding page
|
||||||
@ -403,19 +507,19 @@ NEW: Accountancy - Add possibility to manage a short alternative label for accou
|
|||||||
NEW: Accountancy - General ledger - Add an option to search not reconciled lines
|
NEW: Accountancy - General ledger - Add an option to search not reconciled lines
|
||||||
NEW: Add accountancy code of thirdparty in contact and supplier export
|
NEW: Add accountancy code of thirdparty in contact and supplier export
|
||||||
NEW: support webp image format
|
NEW: support webp image format
|
||||||
NEW: Add checkbox "overwrite if exists" into ECM/DMS module
|
NEW: add checkbox "overwrite if exists" into ECM/DMS module
|
||||||
NEW: add a link to notes in members list
|
NEW: add a link to notes in members list
|
||||||
NEW: add a parameter to group same products in TakePOS
|
NEW: add a parameter to group same products in TakePOS
|
||||||
NEW: add a parameter to sort product by label in TakePOS
|
NEW: add a parameter to sort product by label in TakePOS
|
||||||
NEW: Add a profil to import contact categories
|
NEW: add a profil to import contact categories
|
||||||
NEW: Add company extrafields into order export
|
NEW: add company extrafields into order export
|
||||||
NEW: add const CASHDESK_FORCE_DECREASE_STOCK to force batch decrementation
|
NEW: add const CASHDESK_FORCE_DECREASE_STOCK to force batch decrementation
|
||||||
NEW: add const TAKEPOS_NUMPAD_USE_PAYMENT_ICON to use icons on payment buttons
|
NEW: add const TAKEPOS_NUMPAD_USE_PAYMENT_ICON to use icons on payment buttons
|
||||||
NEW: add csv separator setup in module admin
|
NEW: add csv separator setup in module admin
|
||||||
NEW: add dedicated substitutions keys for extrafields of type date and datetime
|
NEW: add dedicated substitutions keys for extrafields of type date and datetime
|
||||||
NEW: add default warehouse for dispatch
|
NEW: add default warehouse for dispatch
|
||||||
NEW: Add due date in feature "Export accounting documents"
|
NEW: add due date in feature "Export accounting documents"
|
||||||
NEW: Add duration information for fichinter
|
NEW: add duration information for fichinter
|
||||||
NEW: Start support of Dark theme into ELDY theme
|
NEW: Start support of Dark theme into ELDY theme
|
||||||
NEW: Add field author public alias for blog post on website module
|
NEW: Add field author public alias for blog post on website module
|
||||||
NEW: Add "finished" field on product list
|
NEW: Add "finished" field on product list
|
||||||
|
|||||||
6
INSTALL
6
INSTALL
@ -1,6 +0,0 @@
|
|||||||
INSTALL
|
|
||||||
-------
|
|
||||||
|
|
||||||
English: See README.md file.
|
|
||||||
|
|
||||||
French: Voir fichier README-FR.md.
|
|
||||||
34
README.md
34
README.md
@ -13,7 +13,7 @@ You can freely use, study, modify or distribute it according to its licence.
|
|||||||
|
|
||||||
You can use it as a standalone application or as a web application to access it from the Internet or a LAN.
|
You can use it as a standalone application or as a web application to access it from the Internet or a LAN.
|
||||||
|
|
||||||
Dolibarr has a large community ready to help you, free forums and [oficially preferred partners ready to offer commercial support should you need it](https://partners.dolibarr.org)
|
Dolibarr has a large community ready to help you, free forums and [officially preferred partners ready to offer commercial support should you need it](https://partners.dolibarr.org)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@ -45,7 +45,7 @@ On GNU/Linux, first check if your distribution has already packaged Dolibarr.
|
|||||||
|
|
||||||
#### Generic install steps:
|
#### Generic install steps:
|
||||||
|
|
||||||
- Check that your installed PHP version is supported [see PHP support](https://wiki.dolibarr.org/index.php/Versions).
|
- Check that your installed PHP version is supported [see PHP support](https://wiki.dolibarr.org/index.php/Releases).
|
||||||
|
|
||||||
- Uncompress the downloaded .zip archive to copy the "dolibarr/htdocs" directory and all its files inside your web server root or get the files directly from GitHub (recommanded if you know git as it makes it easier if you want to upgrade later):
|
- Uncompress the downloaded .zip archive to copy the "dolibarr/htdocs" directory and all its files inside your web server root or get the files directly from GitHub (recommanded if you know git as it makes it easier if you want to upgrade later):
|
||||||
|
|
||||||
@ -71,6 +71,7 @@ On GNU/Linux, first check if your distribution has already packaged Dolibarr.
|
|||||||
|
|
||||||
- Follow the installer instructions
|
- Follow the installer instructions
|
||||||
|
|
||||||
|
|
||||||
### Saas/Cloud setup
|
### Saas/Cloud setup
|
||||||
|
|
||||||
If you don't have time to install it yourself, you can try some commercial 'ready to use' Cloud offers (See https://saas.dolibarr.org). However, this third solution is not free.
|
If you don't have time to install it yourself, you can try some commercial 'ready to use' Cloud offers (See https://saas.dolibarr.org). However, this third solution is not free.
|
||||||
@ -86,10 +87,12 @@ Dolibarr supports upgrading usually wihtout the need for any (commercial) suppor
|
|||||||
- 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*").
|
||||||
|
|
||||||
|
|
||||||
## WHAT'S NEW
|
## WHAT'S NEW
|
||||||
|
|
||||||
See the [ChangeLog](https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog) file.
|
See the [ChangeLog](https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog) file.
|
||||||
|
|
||||||
|
|
||||||
## FEATURES
|
## FEATURES
|
||||||
|
|
||||||
### Main application/modules (all optional)
|
### Main application/modules (all optional)
|
||||||
@ -139,15 +142,18 @@ See the [ChangeLog](https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog)
|
|||||||
### Other general features
|
### Other general features
|
||||||
|
|
||||||
- Localization in most major languages
|
- Localization in most major languages
|
||||||
|
- Multi-Language Support
|
||||||
- Multi-Users and groups with finely grained rights
|
- Multi-Users and groups with finely grained rights
|
||||||
- Multi-currency
|
- Multi-Currency
|
||||||
- Multi-company by adding of an external module
|
- Multi-Company (by adding of an external module)
|
||||||
|
|
||||||
- Very user friendly and easy to use
|
- Very user friendly and easy to use
|
||||||
- customizable Dashboard
|
- customizable Dashboard
|
||||||
- Highly customizable: enable only the modules you need, add user personalized fields, choose your skin, several menu managers (can be used by internal users as a back-office with a particular menu, or by external users as a front-office with another one)
|
- Highly customizable: enable only the modules you need, add user personalized fields, choose your skin, several menu managers (can be used by internal users as a back-office with a particular menu, or by external users as a front-office with another one)
|
||||||
|
|
||||||
- APIs
|
- APIs (REST, SOAP)
|
||||||
- Code that is easy to understand, maintain and develop (PHP with no heavy framework; trigger and hook architecture)
|
- Code that is easy to understand, maintain and develop (PHP with no heavy framework; trigger and hook architecture)
|
||||||
|
|
||||||
- Support a lot of country specific features:
|
- Support a lot of country specific features:
|
||||||
- Spanish Tax RE and ISPF
|
- Spanish Tax RE and ISPF
|
||||||
- French NPR VAT rate (VAT called "Non Perçue Récupérable" for DOM-TOM)
|
- French NPR VAT rate (VAT called "Non Perçue Récupérable" for DOM-TOM)
|
||||||
@ -160,15 +166,18 @@ See the [ChangeLog](https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog)
|
|||||||
- Flexible PDF & ODT generation for invoices, proposals, orders...
|
- Flexible PDF & ODT generation for invoices, proposals, orders...
|
||||||
- …
|
- …
|
||||||
|
|
||||||
|
|
||||||
### System Environment / Requirements
|
### System Environment / Requirements
|
||||||
|
|
||||||
- Works with PHP 5.5+ and MariaDB 5.0.3+, MySQL 5.0.3+ or PostgreSQL 8.1.4+ (See requirements on the [Wiki](https://wiki.dolibarr.org/index.php/Prerequisite))
|
- Works with PHP 5.6+ and MariaDB 5.0.3+, MySQL 5.0.3+ or PostgreSQL 8.1.4+ (See requirements on the [Wiki](https://wiki.dolibarr.org/index.php/Prerequisite))
|
||||||
- Compatible with all Cloud solutions that match MySQL, PHP or PostgreSQL prerequisites.
|
- Compatible with all Cloud solutions that match PHP & MySQL or PostgreSQL prerequisites.
|
||||||
|
|
||||||
|
|
||||||
### Extending
|
### Extending
|
||||||
|
|
||||||
Dolibarr can be extended with a lot of other external application or modules from third party developers available at the [DoliStore](https://www.dolistore.com).
|
Dolibarr can be extended with a lot of other external application or modules from third party developers available at the [DoliStore](https://www.dolistore.com).
|
||||||
|
|
||||||
|
|
||||||
## WHAT DOLIBARR CAN'T DO YET
|
## WHAT DOLIBARR CAN'T DO YET
|
||||||
|
|
||||||
These are features that Dolibarr does **not** yet fully support:
|
These are features that Dolibarr does **not** yet fully support:
|
||||||
@ -178,22 +187,29 @@ These are features that Dolibarr does **not** yet fully support:
|
|||||||
- No native embedded Webmail, but you can send email to contacts in Dolibarr with e.g. offers, invoices, etc.
|
- No native embedded Webmail, but you can send email to contacts in Dolibarr with e.g. offers, invoices, etc.
|
||||||
- Dolibarr can't do coffee (yet)
|
- Dolibarr can't do coffee (yet)
|
||||||
|
|
||||||
|
|
||||||
## DOCUMENTATION
|
## DOCUMENTATION
|
||||||
|
|
||||||
Administrator, user, developer and translator's documentations are available along with other community resources in the [Wiki](https://wiki.dolibarr.org).
|
Administrator, user, developer and translator's documentations are available along with other community resources in the [Wiki](https://wiki.dolibarr.org).
|
||||||
|
|
||||||
|
|
||||||
## CONTRIBUTING
|
## CONTRIBUTING
|
||||||
|
|
||||||
This project exists thanks to all the people who contribute. [[Contribute](https://github.com/Dolibarr/dolibarr/blob/develop/.github/CONTRIBUTING.md)]
|
This project exists thanks to all the people who contribute.
|
||||||
|
Please read the instructions how to contribute (report a bug/error, a feature request, send code ...) [[Contribute](https://github.com/Dolibarr/dolibarr/blob/develop/.github/CONTRIBUTING.md)]
|
||||||
|
|
||||||
|
A view on Contributors:
|
||||||
|
|
||||||
<a href="https://github.com/Dolibarr/dolibarr/graphs/contributors"><img src="https://opencollective.com/dolibarr/contributors.svg?width=890&button=false" /></a>
|
<a href="https://github.com/Dolibarr/dolibarr/graphs/contributors"><img src="https://opencollective.com/dolibarr/contributors.svg?width=890&button=false" /></a>
|
||||||
|
|
||||||
|
|
||||||
## CREDITS
|
## CREDITS
|
||||||
|
|
||||||
Dolibarr is the work of many contributors over the years and uses some fine PHP libraries.
|
Dolibarr is the work of many contributors over the years and uses some fine PHP libraries.
|
||||||
|
|
||||||
See [COPYRIGHT](https://github.com/Dolibarr/dolibarr/blob/develop/COPYRIGHT) file.
|
See [COPYRIGHT](https://github.com/Dolibarr/dolibarr/blob/develop/COPYRIGHT) file.
|
||||||
|
|
||||||
|
|
||||||
## NEWS AND SOCIAL NETWORKS
|
## NEWS AND SOCIAL NETWORKS
|
||||||
|
|
||||||
Follow Dolibarr project on:
|
Follow Dolibarr project on:
|
||||||
@ -204,6 +220,8 @@ Follow Dolibarr project on:
|
|||||||
- [YouTube](https://www.youtube.com/user/DolibarrERPCRM)
|
- [YouTube](https://www.youtube.com/user/DolibarrERPCRM)
|
||||||
- [GitHub](https://github.com/Dolibarr/dolibarr)
|
- [GitHub](https://github.com/Dolibarr/dolibarr)
|
||||||
|
|
||||||
|
|
||||||
### Sponsors
|
### Sponsors
|
||||||
|
|
||||||
Support this project by becoming a sponsor. Your logo will show up here. 🙏 [[Become a sponsor/backer](https://opencollective.com/dolibarr#backer)]
|
Support this project by becoming a sponsor. Your logo will show up here. 🙏 [[Become a sponsor/backer](https://opencollective.com/dolibarr#backer)]
|
||||||
|
|
||||||
|
|||||||
43
SECURITY.md
43
SECURITY.md
@ -6,14 +6,13 @@ This file contains some policies about the security reports on Dolibarr ERP CRM
|
|||||||
|
|
||||||
| Version | Supported |
|
| Version | Supported |
|
||||||
| --------- | ------------------ |
|
| --------- | ------------------ |
|
||||||
| <= 9.0.* | :x: |
|
| <= 12.* | :x: |
|
||||||
| >= 10.0.* | :white_check_mark: |
|
| >= 13.* | :white_check_mark: |
|
||||||
|
|
||||||
|
|
||||||
## Reporting a Vulnerability
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
To report a vulnerability, please send an email to security@dolibarr.org
|
To report a vulnerability, please use GitHub security advisory (alternatively send an email to security@dolibarr.org)
|
||||||
In most cases, after fixing the security, we make an answer by email to say the issue has been fixed.
|
|
||||||
|
|
||||||
|
|
||||||
## Hunting vulnerabilities on Dolibarr
|
## Hunting vulnerabilities on Dolibarr
|
||||||
@ -24,11 +23,11 @@ If you believe you've found a security bug in our service, we are happy to work
|
|||||||
|
|
||||||
Any type of denial of service attacks is strictly forbidden, as well as any interference with network equipment and Dolibarr infrastructure.
|
Any type of denial of service attacks is strictly forbidden, as well as any interference with network equipment and Dolibarr infrastructure.
|
||||||
|
|
||||||
We recommand to install Dolibarr ERP CRM on you own server (as most Open Source software, download and use is free: https://www.dolibarr.org/download) to get access on every side of application.
|
We recommand to install Dolibarr ERP CRM on your own server (as most Open Source software, download and use is free: https://www.dolibarr.org/download) to get access on every side of application.
|
||||||
|
|
||||||
### User Agent
|
### User Agent
|
||||||
|
|
||||||
If you try to find bug on Dolibarr, we recommend to append to your user-agent header the following value: '-BugHunting-dolibarr'.
|
If you try to find bug on Dolibarr, we recommend to append to your user-agent header the following value: '-securitytest-for-dolibarr'.
|
||||||
|
|
||||||
### Account access
|
### Account access
|
||||||
|
|
||||||
@ -37,54 +36,43 @@ You can install the web application yourself on your own platform/server so you
|
|||||||
|
|
||||||
## Eligibility and Responsible Disclosure
|
## Eligibility and Responsible Disclosure
|
||||||
|
|
||||||
We are happy to thank everyone who submits valid reports which help us improve the security of Dolibarr however, only those that meet the following eligibility requirements may receive a monetary reward:
|
We are happy to thank everyone who submits valid reports which help us improve the security of Dolibarr however, only those that meet the following eligibility requirements will be "validated reports" (if not, we may close the report without any answer):
|
||||||
|
|
||||||
You must be the first reporter of a vulnerability.
|
You must be the first reporter of the vulnerability (duplicate reports are closed).
|
||||||
|
|
||||||
The vulnerability must be a qualifying vulnerability (see below)
|
|
||||||
|
|
||||||
Any vulnerability found must be reported no later than 24 hours after discovery
|
|
||||||
|
|
||||||
You must send a clear textual description of the report along with steps to reproduce the issue, include attachments such as screenshots or proof of concept code as necessary.
|
You must send a clear textual description of the report along with steps to reproduce the issue, include attachments such as screenshots or proof of concept code as necessary.
|
||||||
|
|
||||||
You must avoid tests that could cause degradation or interruption of our service (refrain from using automated tools, and limit yourself about requests per second), that's why we recommand to install softwate on your own platform.
|
You must avoid tests that could cause degradation or interruption of our service (refrain from using automated tools, and limit yourself about requests per second), that's why we recommand to install softwate on your own platform.
|
||||||
|
|
||||||
You must not leak, manipulate, or destroy any user data.
|
You must not leak, manipulate, or destroy any user data of third parties to find your vulnerability.
|
||||||
|
|
||||||
You must not be a former or current employee of Dolibarr or one of its contractor.
|
|
||||||
|
|
||||||
Reports about vulnerabilities are examined by our security analysts.
|
|
||||||
|
|
||||||
Our analysis is always based on worst case exploitation of the vulnerability, as is the reward we pay.
|
|
||||||
|
|
||||||
No vulnerability disclosure, including partial is allowed for the moment.
|
|
||||||
|
|
||||||
|
|
||||||
## Scope for qualified vulnerabilities
|
## Scope for qualified vulnerabilities
|
||||||
|
|
||||||
ONLY vulnerabilities discovered, when the following setup on test platform is used, are accepted:
|
ONLY vulnerabilities discovered, when the following setup on test platform is used, are "valid":
|
||||||
|
|
||||||
* $dolibarr_main_prod must be set to 1 into conf.php
|
* $dolibarr_main_prod must be set to 1 into conf.php
|
||||||
* $dolibarr_nocsrfcheck must be kept to the value 0 into conf.php (this is the default value)
|
* $dolibarr_nocsrfcheck must be kept to the value 0 into conf.php (this is the default value)
|
||||||
* $dolibarr_main_force_https must be set to something else than 0.
|
* $dolibarr_main_force_https must be set to something else than 0.
|
||||||
* The constant MAIN_SECURITY_CSRF_WITH_TOKEN must be set to 1 into backoffice menu Home - Setup - Other (this protection should be enabled soon by default)
|
* The constant MAIN_SECURITY_CSRF_WITH_TOKEN must be set to 1 into backoffice menu Home - Setup - Other (this protection should be set to 1 soon by default)
|
||||||
* The module DebugBar must NOT be enabled (by default, this module is not enabled. This is a developer tool)
|
* The module DebugBar must NOT be enabled (by default, this module is not enabled. This is a developer tool)
|
||||||
* The module ModuleBuilder must NOT be enabled (by default, this module is not enabled. This is a developer tool)
|
* The module ModuleBuilder must NOT be enabled (by default, this module is not enabled. This is a developer tool)
|
||||||
* ONLY security reports on modules provided by default and with the "stable" status are allowed (troubles into "experimental", "developement" or external modules are not accepted).
|
* ONLY security reports on modules provided by default and with the "stable" status are valid (troubles into "experimental", "developement" or external modules are not valid vulnerabilities).
|
||||||
* The root of web server must link to htdocs and the documents directory must be outside of the web server root (this is the default when using the default installer but may differs with external installer).
|
* The root of web server must link to htdocs and the documents directory must be outside of the web server root (this is the default when using the default installer but may differs with external installer).
|
||||||
* The web server setup must be done so only the documents directory is in write mode. The root directory called htdocs must be readonly.
|
* The web server setup must be done so only the documents directory is in write mode. The root directory called htdocs must be readonly.
|
||||||
* CSRF attacks are accepted for all when using a POST URL, but are accepted only for creating or updating data resctricted to the admin user when using GET URL.
|
* CSRF attacks are accepted when using a POST URL, but when using GET URL, they are validated only for creating, updating or deleting data resctricted from pages restricted to admin users.
|
||||||
* Ability for a high level user to edit web site pages in the CMS by including javascript is an expected feature.
|
* Ability for a high level user to edit web site pages into the CMS by including HTML or Javascript is an expected feature. Vulnerabilities into the website module are validated only if HTML or Javascript injection can be done by a non allowed user.
|
||||||
|
|
||||||
Scope is the web application (back office) and the APIs.
|
Scope is the web application (back office) and the APIs.
|
||||||
|
|
||||||
|
|
||||||
## Qualifying vulnerabilities for Bug bounty programs
|
## Qualifying vulnerabilities for Bug bounty programs
|
||||||
|
|
||||||
* Remote code execution (RCE)
|
* Remote code execution (RCE)
|
||||||
* Local files access and manipulation (LFI, RFI, XXE, SSRF, XSPA)
|
* Local files access and manipulation (LFI, RFI, XXE, SSRF, XSPA)
|
||||||
* Code injections (HTML, JS, SQL, PHP, ...)
|
* Code injections (HTML, JS, SQL, PHP, ...)
|
||||||
* Cross-Site Scripting (XSS)
|
* Cross-Site Scripting (XSS)
|
||||||
* Cross-Site Requests Forgery (CSRF) with real security impact
|
* Cross-Site Requests Forgery (CSRF) with real security impact (when using GET URLs, CSRF are qualified only for creating, updating or deleting data from pages restricted to admin users)
|
||||||
* Open redirect
|
* Open redirect
|
||||||
* Broken authentication & session management
|
* Broken authentication & session management
|
||||||
* Insecure direct object references
|
* Insecure direct object references
|
||||||
@ -96,6 +84,7 @@ Scope is the web application (back office) and the APIs.
|
|||||||
|
|
||||||
|
|
||||||
## Non-qualifying vulnerabilities for Bug bounty programs, but qualified for reporting
|
## Non-qualifying vulnerabilities for Bug bounty programs, but qualified for reporting
|
||||||
|
|
||||||
* "Self" XSS
|
* "Self" XSS
|
||||||
* SSL/TLS best practices
|
* SSL/TLS best practices
|
||||||
* Denial of Service attacks
|
* Denial of Service attacks
|
||||||
|
|||||||
26
build/README
26
build/README
@ -1,48 +1,62 @@
|
|||||||
README (English)
|
README (English)
|
||||||
|
|
||||||
|
Path: /dolibarr/build/README
|
||||||
|
|
||||||
##################################################
|
##################################################
|
||||||
Building packages
|
Building packages
|
||||||
##################################################
|
##################################################
|
||||||
|
|
||||||
All sub-directories of "build" directory contains files (setup or binary tools) required to build automatically Dolibarr packages.
|
All sub-directories of "build" directory contains files (setup or binary tools) required to build automatically Dolibarr packages.
|
||||||
There are several tools:
|
|
||||||
|
|
||||||
|
There are several tools:
|
||||||
|
|
||||||
|
|
||||||
- To build full Dolibarr packages, launch the script
|
- To build full Dolibarr packages, launch the script
|
||||||
> Launch command perl makepack-dolibarr.pl
|
> Launch command perl makepack-dolibarr.pl
|
||||||
|
|
||||||
Note: Prerequisites to build tgz, debian, rpm package
|
--------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
Prerequisites to build tgz, debian, rpm package:
|
||||||
|
|
||||||
> apt-get install tar dpkg dpatch p7zip-full rpm zip
|
> apt-get install tar dpkg dpatch p7zip-full rpm zip
|
||||||
|
|
||||||
Note: Prerequisites to build autoexe DoliWamp package:
|
|
||||||
|
--------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Prerequisites to build autoexe DoliWamp package:
|
||||||
> 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.3.9.exe (http://www.jrsoftware.org)
|
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 (http://www.wampserver.com). See file build/exe/doliwamp.iss to know the doliwamp version currently setup.
|
For example by running wampserver3.2.0_x64.exe (https://www.wampserver.com).
|
||||||
|
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
|
||||||
> To build manually the .exe from Windows (running from makepack-dolibarr.pl script is however recommanded),
|
> To build manually the .exe from Windows (running from makepack-dolibarr.pl script is however recommanded),
|
||||||
open file build/exe/doliwamp.iss and click on button "Compile".
|
open file build/exe/doliwamp.iss and click on button "Compile".
|
||||||
The .exe file will be build into directory build.
|
The .exe file will be build into directory build.
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
- To build a theme package, launch the script
|
- To build a theme package, launch the script
|
||||||
> perl makepack-dolibarrtheme.pl
|
> perl makepack-dolibarrtheme.pl
|
||||||
|
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
- To build a package for a module, launch the script
|
- To build a package for a module, launch the script
|
||||||
> perl makepack-dolibarrmodule.pl
|
> perl makepack-dolibarrmodule.pl
|
||||||
|
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
- To build developper documentation, launch the script
|
- To build developper documentation, launch the script
|
||||||
> perl dolibarr-doxygen-build.pl
|
> perl dolibarr-doxygen-build.pl
|
||||||
|
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
Note:
|
Note:
|
||||||
The build directory and all its contents is absolutely not required to make Dolibarr working.
|
The build directory and all its contents is absolutely not required to make Dolibarr working.
|
||||||
|
|||||||
@ -306,7 +306,7 @@ If script fails with error Bad certificate, you can set "export PERL_LWP_SSL_VER
|
|||||||
- htdocs/includes/jquery/plugins/datatables
|
- htdocs/includes/jquery/plugins/datatables
|
||||||
- htdocs/includes/jszip
|
- htdocs/includes/jszip
|
||||||
- htdocs/includes/mike42
|
- htdocs/includes/mike42
|
||||||
- htdocs/includes/phpexcel or htdocs/includes/phpoffice
|
- htdocs/includes/phpoffice
|
||||||
- htdocs/includes/restler/framework/Luracast/Restler/explorer
|
- htdocs/includes/restler/framework/Luracast/Restler/explorer
|
||||||
- htdocs/includes/swiftmailer
|
- htdocs/includes/swiftmailer
|
||||||
- htdocs/includes/tcpdf or htdocs/includes/tecnickcom
|
- htdocs/includes/tcpdf or htdocs/includes/tecnickcom
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||||
Upstream-Name: Dolibarr
|
Upstream-Name: Dolibarr
|
||||||
Upstream-Contact: Laurent Destailleur <eldy@users.sourceforge.net>
|
Upstream-Contact: Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
Source: https://www.dolibarr.org/files/stable/standard/
|
Source: https://www.dolibarr.org/files/stable/standard/
|
||||||
@ -37,7 +37,8 @@ Copyright: 2002-2009, Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
|||||||
2010, Servitux Servicios Informaticos <info@servitux.es>
|
2010, Servitux Servicios Informaticos <info@servitux.es>
|
||||||
2011, Herve Prot <herve.prot@symeos.com>
|
2011, Herve Prot <herve.prot@symeos.com>
|
||||||
2011, Remy Younes <ryounes@gmail.com>
|
2011, Remy Younes <ryounes@gmail.com>
|
||||||
2012-2013, Christophe Battarel <christophe.battarel@altairis.fr>
|
2012-2013, Christophe Battarel <christophe.battarel@altairis.fr>
|
||||||
|
|
||||||
License: GPL-3+
|
License: GPL-3+
|
||||||
This program is free software; you can redistribute it
|
This program is free software; you can redistribute it
|
||||||
and/or modify it under the terms of the GNU General Public
|
and/or modify it under the terms of the GNU General Public
|
||||||
@ -56,7 +57,9 @@ License: GPL-3+
|
|||||||
.
|
.
|
||||||
On Debian systems, the full text of the GNU General Public
|
On Debian systems, the full text of the GNU General Public
|
||||||
License version 3 can be found in the file
|
License version 3 can be found in the file
|
||||||
`/usr/share/common-licenses/GPL-3'.
|
'/usr/share/common-licenses/GPL-3'.
|
||||||
|
|
||||||
|
------------------------------------------------------------
|
||||||
|
|
||||||
Files: htdocs/includes/adodbtime/*
|
Files: htdocs/includes/adodbtime/*
|
||||||
Copyright: 2003-2005, John Lim
|
Copyright: 2003-2005, John Lim
|
||||||
@ -80,6 +83,9 @@ Comment:
|
|||||||
Those files are not shipped in the binary package since we use
|
Those files are not shipped in the binary package since we use
|
||||||
the library as packaged in "libphp-adodb".
|
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+
|
||||||
@ -109,6 +115,9 @@ Comment:
|
|||||||
Those files are not shipped in the binary package since we use the
|
Those files are not shipped in the binary package since we use the
|
||||||
library as packaged in "ckeditor".
|
library as packaged in "ckeditor".
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------------------
|
||||||
|
|
||||||
Files: htdocs/includes/fonts/*
|
Files: htdocs/includes/fonts/*
|
||||||
Copyright: 2003, Bitstream Inc
|
Copyright: 2003, Bitstream Inc
|
||||||
unknown, Gavin Graham
|
unknown, Gavin Graham
|
||||||
@ -158,7 +167,10 @@ License: other
|
|||||||
Comments:
|
Comments:
|
||||||
Those files are not shipped in the binary package as we
|
Those files are not shipped in the binary package as we
|
||||||
configure Dolibarr to use Dejavu fonts from "fonts-dejavu-core".
|
configure Dolibarr to use Dejavu fonts from "fonts-dejavu-core".
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------------------
|
||||||
|
|
||||||
Files: doc/images/*
|
Files: doc/images/*
|
||||||
Copyright: Laurent Destailleur
|
Copyright: Laurent Destailleur
|
||||||
License: CC-BY-SA-3.0
|
License: CC-BY-SA-3.0
|
||||||
@ -174,33 +186,15 @@ License: CC-BY-SA-3.0
|
|||||||
distribute the resulting work only under the same, similar or a compatible
|
distribute the resulting work only under the same, similar or a compatible
|
||||||
license.
|
license.
|
||||||
.
|
.
|
||||||
For more information, see http://creativecommons.org/licenses/by-sa/3.0/
|
For more information, see https://creativecommons.org/licenses/by-sa/3.0/
|
||||||
|
|
||||||
Files: htdocs/includes/fpdfi/*
|
|
||||||
Copyright: 2004-2011 Setasign - Jan Slabon
|
|
||||||
License: GPL-2+
|
|
||||||
This program is free software; you can redistribute it
|
|
||||||
and/or modify it under the terms of the GNU General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2 of the License, or (at your option) any later
|
|
||||||
version.
|
|
||||||
.
|
|
||||||
This program is distributed in the hope that it will be
|
|
||||||
useful, but WITHOUT ANY WARRANTY; without even the implied
|
|
||||||
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
||||||
PURPOSE. See the GNU General Public License for more
|
|
||||||
details.
|
|
||||||
.
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
.
|
|
||||||
On Debian systems, the full text of the GNU General Public
|
|
||||||
License version 2 can be found in the file
|
|
||||||
`/usr/share/common-licenses/GPL-2'.
|
|
||||||
|
|
||||||
Files: htdocs/includes/geoip/*
|
|
||||||
|
------------------------------------------------------------
|
||||||
|
|
||||||
|
Files: htdocs/includes/geoip2/*
|
||||||
Copyright: 2007 MaxMind LLC
|
Copyright: 2007 MaxMind LLC
|
||||||
License: LGPL-2.1+
|
License: CC-By-SA
|
||||||
This library is free software; you can redistribute it and/or
|
This library is free software; you can redistribute it and/or
|
||||||
modify it under the terms of the GNU Lesser General Public
|
modify it under the terms of the GNU Lesser General Public
|
||||||
License as published by the Free Software Foundation; either
|
License as published by the Free Software Foundation; either
|
||||||
@ -216,10 +210,14 @@ License: LGPL-2.1+
|
|||||||
.
|
.
|
||||||
On Debian systems, the full text of the GNU Lesser General Public
|
On Debian systems, the full text of the GNU Lesser General Public
|
||||||
License version 2.1 can be found in the file
|
License version 2.1 can be found in the file
|
||||||
`/usr/share/common-licenses/LGPL-2.1'.
|
'/usr/share/common-licenses/LGPL-2.1'.
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------------------
|
||||||
|
|
||||||
Files: htdocs/includes/jquery/*
|
Files: htdocs/includes/jquery/*
|
||||||
Copyright: JQuery team
|
Copyright: JQuery team
|
||||||
|
https://www.jquery.com
|
||||||
License: GPL-2+ or MIT
|
License: GPL-2+ or MIT
|
||||||
=== GPL-2+ LICENSE NOTICE ===
|
=== GPL-2+ LICENSE NOTICE ===
|
||||||
.
|
.
|
||||||
@ -240,7 +238,7 @@ License: GPL-2+ or MIT
|
|||||||
.
|
.
|
||||||
On Debian systems, the full text of the GNU General Public
|
On Debian systems, the full text of the GNU General Public
|
||||||
License version 2 can be found in the file
|
License version 2 can be found in the file
|
||||||
`/usr/share/common-licenses/GPL-2'.
|
'/usr/share/common-licenses/GPL-2'.
|
||||||
.
|
.
|
||||||
=== MIT LICENSE ===
|
=== MIT LICENSE ===
|
||||||
.
|
.
|
||||||
@ -267,6 +265,8 @@ Comment:
|
|||||||
"libjs-jquery-ui". Most of the plugins are shipped though.
|
"libjs-jquery-ui". Most of the plugins are shipped though.
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------------------
|
||||||
|
|
||||||
Files: htdocs/includes/jquery/plugins/flot/*
|
Files: htdocs/includes/jquery/plugins/flot/*
|
||||||
Copyright: Flot team
|
Copyright: Flot team
|
||||||
License: Public-Domain
|
License: Public-Domain
|
||||||
@ -275,6 +275,9 @@ Comment:
|
|||||||
Those files are not shipped in the binary package because we configure
|
Those files are not shipped in the binary package because we configure
|
||||||
Dolibarr to use the files provided by "libjs-flot".
|
Dolibarr to use the files provided by "libjs-flot".
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------------------
|
||||||
|
|
||||||
Files: htdocs/includes/jsgantt/*
|
Files: htdocs/includes/jsgantt/*
|
||||||
Copyright: JSGantt team
|
Copyright: JSGantt team
|
||||||
License: GPL-2+
|
License: GPL-2+
|
||||||
@ -295,7 +298,10 @@ License: GPL-2+
|
|||||||
.
|
.
|
||||||
On Debian systems, the full text of the GNU General Public
|
On Debian systems, the full text of the GNU General Public
|
||||||
License version 2 can be found in the file
|
License version 2 can be found in the file
|
||||||
`/usr/share/common-licenses/GPL-2'.
|
'/usr/share/common-licenses/GPL-2'.
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------------------
|
||||||
|
|
||||||
Files: htdocs/includes/nusoap/*
|
Files: htdocs/includes/nusoap/*
|
||||||
Copyright: 2002-2010 NuSphere Corporation
|
Copyright: 2002-2010 NuSphere Corporation
|
||||||
@ -315,11 +321,14 @@ License: LGPL-2.1+
|
|||||||
.
|
.
|
||||||
On Debian systems, the full text of the GNU Lesser General Public
|
On Debian systems, the full text of the GNU Lesser General Public
|
||||||
License version 2.1 can be found in the file
|
License version 2.1 can be found in the file
|
||||||
`/usr/share/common-licenses/LGPL-2.1'.
|
'/usr/share/common-licenses/LGPL-2.1'.
|
||||||
Comment:
|
Comment:
|
||||||
Those files are not shipped in the binary package since we
|
Those files are not shipped in the binary package since we
|
||||||
configure Dolibarr to use the library provided in "libnusoap-php".
|
configure Dolibarr to use the library provided in "libnusoap-php".
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------------------
|
||||||
|
|
||||||
Files: htdocs/includes/odtphp/*
|
Files: htdocs/includes/odtphp/*
|
||||||
Copyright: 2008, Julien Pauli
|
Copyright: 2008, Julien Pauli
|
||||||
2008, Cyril PIERRE de GEYER
|
2008, Cyril PIERRE de GEYER
|
||||||
@ -342,29 +351,12 @@ License: GPL-2+
|
|||||||
.
|
.
|
||||||
On Debian systems, the full text of the GNU General Public
|
On Debian systems, the full text of the GNU General Public
|
||||||
License version 2 can be found in the file
|
License version 2 can be found in the file
|
||||||
`/usr/share/common-licenses/GPL-2'.
|
'/usr/share/common-licenses/GPL-2'.
|
||||||
|
|
||||||
Files: htdocs/includes/phpexcel/*
|
|
||||||
Copyright: 2006-2011 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
License: LGPL-2.1+
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2.1 of the License, or (at your option) any later version.
|
|
||||||
.
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
.
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
.
|
|
||||||
On Debian systems, the full text of the GNU Lesser General Public
|
|
||||||
License version 2.1 can be found in the file
|
|
||||||
`/usr/share/common-licenses/LGPL-2.1'.
|
|
||||||
|
|
||||||
Files: htdocs/includes/tcpdf/*
|
------------------------------------------------------------
|
||||||
|
|
||||||
|
Files: htdocs/includes/tecnickcom/*
|
||||||
Copyright: 2002-2013 Nicola Asuni - Tecnick.com LTD
|
Copyright: 2002-2013 Nicola Asuni - Tecnick.com LTD
|
||||||
License: LGPL-3.0+
|
License: LGPL-3.0+
|
||||||
TCPDF is free software: you can redistribute it and/or modify it
|
TCPDF is free software: you can redistribute it and/or modify it
|
||||||
|
|||||||
@ -150,7 +150,6 @@ case "$1" in
|
|||||||
##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
|
||||||
##grep -q -c "dolibarr_lib_PHPEXCEL_PATH" $config || echo "<?php \$dolibarr_lib_PHPEXCEL_PATH=''; ?>" >> $config
|
|
||||||
##grep -q -c "dolibarr_lib_TCPDF_PATH" $config || echo "<?php \$dolibarr_lib_TCPDF_PATH=''; ?>" >> $config
|
##grep -q -c "dolibarr_lib_TCPDF_PATH" $config || echo "<?php \$dolibarr_lib_TCPDF_PATH=''; ?>" >> $config
|
||||||
#grep -q -c "dolibarr_js_CKEDITOR" $config || [ ! -d "/usr/share/javascript/ckeditor" ] || echo "<?php \$dolibarr_js_CKEDITOR='/javascript/ckeditor'; ?>" >> $config
|
#grep -q -c "dolibarr_js_CKEDITOR" $config || [ ! -d "/usr/share/javascript/ckeditor" ] || echo "<?php \$dolibarr_js_CKEDITOR='/javascript/ckeditor'; ?>" >> $config
|
||||||
#grep -q -c "dolibarr_js_JQUERY" $config || [ ! -d "/usr/share/javascript/jquery" ] || echo "<?php \$dolibarr_js_JQUERY='/javascript/jquery'; ?>" >> $config
|
#grep -q -c "dolibarr_js_JQUERY" $config || [ ! -d "/usr/share/javascript/jquery" ] || echo "<?php \$dolibarr_js_JQUERY='/javascript/jquery'; ?>" >> $config
|
||||||
|
|||||||
@ -35,7 +35,6 @@ $force_install_distrib='debian';
|
|||||||
//$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';
|
||||||
//$force_dolibarr_lib_PHPEXCEL_PATH=''; // Use '' or 'disabled'
|
|
||||||
//$force_dolibarr_js_CKEDITOR='/javascript/ckeditor'; // Use '/javascript/ckeditor' or 'disabled'
|
//$force_dolibarr_js_CKEDITOR='/javascript/ckeditor'; // Use '/javascript/ckeditor' or 'disabled'
|
||||||
//$force_dolibarr_js_JQUERY='/javascript/jquery';
|
//$force_dolibarr_js_JQUERY='/javascript/jquery';
|
||||||
//$force_dolibarr_js_JQUERY_UI='/javascript/jquery-ui';
|
//$force_dolibarr_js_JQUERY_UI='/javascript/jquery-ui';
|
||||||
|
|||||||
@ -103,8 +103,6 @@ override_dh_install:
|
|||||||
|
|
||||||
# clean from useless files
|
# clean from useless files
|
||||||
rm -fr htdocs/includes/jquery/plugins/multiselect
|
rm -fr htdocs/includes/jquery/plugins/multiselect
|
||||||
rm -fr htdocs/includes/phpexcel/PHPExcel/Shared/PDF
|
|
||||||
rm -fr htdocs/includes/phpexcel/PHPExcel/Shared/PCLZip
|
|
||||||
rm -fr htdocs/includes/tcpdf/fonts/dejavu-fonts-ttf-2.33
|
rm -fr htdocs/includes/tcpdf/fonts/dejavu-fonts-ttf-2.33
|
||||||
rm -fr htdocs/includes/tcpdf/fonts/freefont-20100919
|
rm -fr htdocs/includes/tcpdf/fonts/freefont-20100919
|
||||||
rm -fr htdocs/includes/tcpdf/fonts/utils
|
rm -fr htdocs/includes/tcpdf/fonts/utils
|
||||||
@ -113,7 +111,6 @@ override_dh_install:
|
|||||||
|
|
||||||
# Licence files are already included into copyright file.
|
# Licence files are already included into copyright file.
|
||||||
rm -f htdocs/includes/jquery/plugins/flot/LICENSE.txt
|
rm -f htdocs/includes/jquery/plugins/flot/LICENSE.txt
|
||||||
rm -f htdocs/includes/phpexcel/license.txt
|
|
||||||
rm -f htdocs/includes/tcpdf/LICENSE.TXT
|
rm -f htdocs/includes/tcpdf/LICENSE.TXT
|
||||||
|
|
||||||
# Drop unwanted executable permissions
|
# Drop unwanted executable permissions
|
||||||
|
|||||||
@ -118,7 +118,7 @@ Source: "C:\wamp64\bin\mariadb\mariadb10.4.10\*.*"; DestDir: "{app}\bin\mariadb\
|
|||||||
;Source: "build\exe\doliwamp\mysql\*.*"; DestDir: "{app}\bin\mariadb\data\mysql"; Flags: onlyifdoesntexist ignoreversion recursesubdirs; Excludes: ".gitignore,.project,CVS\*,Thumbs.db"
|
;Source: "build\exe\doliwamp\mysql\*.*"; DestDir: "{app}\bin\mariadb\data\mysql"; Flags: onlyifdoesntexist ignoreversion recursesubdirs; Excludes: ".gitignore,.project,CVS\*,Thumbs.db"
|
||||||
|
|
||||||
; Dolibarr
|
; Dolibarr
|
||||||
Source: "htdocs\*.*"; DestDir: "{app}\www\dolibarr\htdocs"; Flags: ignoreversion recursesubdirs; Excludes: ".gitignore,.project,CVS\*,Thumbs.db,custom\*,custom2\*,documents\*,includes\ckeditor\_source\*,includes\savant\*,includes\phpmailer\*,jquery\plugins\template\*,nltechno*\*,sabre\sabre\*\tests,PHPExcel\Shared\PDF\*,PHPExcel\Shared\PCLZip\*,tcpdf\fonts\dejavu-fonts-ttf-2.33\*,tcpdf\fonts\freefont-20100919\*,tcpdf\fonts\utils\*,*\conf.php,*\conf.php.mysql,*\conf.php.old,*\conf.php.postgres,*\conf.php.sav,*\install.forced.php"
|
Source: "htdocs\*.*"; DestDir: "{app}\www\dolibarr\htdocs"; Flags: ignoreversion recursesubdirs; Excludes: ".gitignore,.project,CVS\*,Thumbs.db,custom\*,custom2\*,documents\*,includes\ckeditor\_source\*,includes\savant\*,includes\phpmailer\*,jquery\plugins\template\*,nltechno*\*,sabre\sabre\*\tests,tcpdf\fonts\dejavu-fonts-ttf-2.33\*,tcpdf\fonts\freefont-20100919\*,tcpdf\fonts\utils\*,*\conf.php,*\conf.php.mysql,*\conf.php.old,*\conf.php.postgres,*\conf.php.sav,*\install.forced.php"
|
||||||
Source: "dev\*.*"; DestDir: "{app}\www\dolibarr\dev"; Flags: ignoreversion recursesubdirs; Excludes: ".gitignore,.project,CVS\*,Thumbs.db,dbmodel\*,fpdf\*,initdata\*,initdemo\*,iso-normes\*,licence\*,phpcheckstyle\*,phpunit\*,samples\*,test\*,uml\*,vagrant\*,xdebug\*"
|
Source: "dev\*.*"; DestDir: "{app}\www\dolibarr\dev"; Flags: ignoreversion recursesubdirs; Excludes: ".gitignore,.project,CVS\*,Thumbs.db,dbmodel\*,fpdf\*,initdata\*,initdemo\*,iso-normes\*,licence\*,phpcheckstyle\*,phpunit\*,samples\*,test\*,uml\*,vagrant\*,xdebug\*"
|
||||||
Source: "doc\*.*"; DestDir: "{app}\www\dolibarr\doc"; Flags: ignoreversion recursesubdirs; Excludes: ".gitignore,.project,CVS\*,Thumbs.db,wiki\*,plaquette\*,dev\*,images\dolibarr_screenshot2.png,images\dolibarr_screenshot3.png,images\dolibarr_screenshot4.png,images\dolibarr_screenshot5.png,images\dolibarr_screenshot6.png,images\dolibarr_screenshot7.png,images\dolibarr_screenshot8.png,images\dolibarr_screenshot9.png,images\dolibarr_screenshot10.png,images\dolibarr_screenshot11.png,images\dolibarr_screenshot12.png"
|
Source: "doc\*.*"; DestDir: "{app}\www\dolibarr\doc"; Flags: ignoreversion recursesubdirs; Excludes: ".gitignore,.project,CVS\*,Thumbs.db,wiki\*,plaquette\*,dev\*,images\dolibarr_screenshot2.png,images\dolibarr_screenshot3.png,images\dolibarr_screenshot4.png,images\dolibarr_screenshot5.png,images\dolibarr_screenshot6.png,images\dolibarr_screenshot7.png,images\dolibarr_screenshot8.png,images\dolibarr_screenshot9.png,images\dolibarr_screenshot10.png,images\dolibarr_screenshot11.png,images\dolibarr_screenshot12.png"
|
||||||
Source: "scripts\*.*"; DestDir: "{app}\www\dolibarr\scripts"; Flags: ignoreversion recursesubdirs; Excludes: ".gitignore,.project,CVS\*,Thumbs.db,product\materiel.net.php,product\import-product.php"
|
Source: "scripts\*.*"; DestDir: "{app}\www\dolibarr\scripts"; Flags: ignoreversion recursesubdirs; Excludes: ".gitignore,.project,CVS\*,Thumbs.db,product\materiel.net.php,product\import-product.php"
|
||||||
|
|||||||
@ -125,6 +125,11 @@ $checksumconcat=array();
|
|||||||
|
|
||||||
$outputfile=$outputdir.'/filelist-'.$release.'.xml';
|
$outputfile=$outputdir.'/filelist-'.$release.'.xml';
|
||||||
$fp = fopen($outputfile, 'w');
|
$fp = fopen($outputfile, 'w');
|
||||||
|
if (empty($fp)) {
|
||||||
|
print 'Failed to open file '.$outputfile."\n";
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
fputs($fp, '<?xml version="1.0" encoding="UTF-8" ?>'."\n");
|
fputs($fp, '<?xml version="1.0" encoding="UTF-8" ?>'."\n");
|
||||||
fputs($fp, '<checksum_list version="'.$release.'" date="'.dol_print_date(dol_now(), 'dayhourrfc').'" generator="'.$script_file.'">'."\n");
|
fputs($fp, '<checksum_list version="'.$release.'" date="'.dol_print_date(dol_now(), 'dayhourrfc').'" generator="'.$script_file.'">'."\n");
|
||||||
|
|
||||||
|
|||||||
@ -476,6 +476,7 @@ if ($nboftargetok) {
|
|||||||
$ret=`rm -f $BUILDROOT/$PROJECT/build.xml`;
|
$ret=`rm -f $BUILDROOT/$PROJECT/build.xml`;
|
||||||
$ret=`rm -f $BUILDROOT/$PROJECT/phpstan.neon`;
|
$ret=`rm -f $BUILDROOT/$PROJECT/phpstan.neon`;
|
||||||
$ret=`rm -f $BUILDROOT/$PROJECT/pom.xml`;
|
$ret=`rm -f $BUILDROOT/$PROJECT/pom.xml`;
|
||||||
|
$ret=`rm -f $BUILDROOT/$PROJECT/README-*.md`;
|
||||||
|
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/build/html`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/build/html`;
|
||||||
$ret=`rm -f $BUILDROOT/$PROJECT/build/Doli*-*`;
|
$ret=`rm -f $BUILDROOT/$PROJECT/build/Doli*-*`;
|
||||||
@ -503,7 +504,10 @@ if ($nboftargetok) {
|
|||||||
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/install/mysql/README`;
|
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/install/mysql/README`;
|
||||||
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/install/pgsql/README`;
|
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/install/pgsql/README`;
|
||||||
|
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/install/mssql`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/install/mssql`;
|
||||||
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/install/sqlite3`;
|
||||||
|
|
||||||
|
$ret=`rm -fr $BUILDROOT/$PROJECT/node_modules`;
|
||||||
|
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/dev/ansible`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/dev/ansible`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/dev/codesniffer`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/dev/codesniffer`;
|
||||||
@ -578,52 +582,54 @@ if ($nboftargetok) {
|
|||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/workstation*`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/workstation*`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/themes/oblyon*`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/themes/oblyon*`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/themes/allscreen*`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/themes/allscreen*`;
|
||||||
|
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/theme/common/octicons/LICENSE`;
|
||||||
|
|
||||||
# Removed other test files
|
# Removed other test files
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/public/test`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/public/test`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/test`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/test`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/Thumbs.db $BUILDROOT/$PROJECT/*/Thumbs.db $BUILDROOT/$PROJECT/*/*/Thumbs.db $BUILDROOT/$PROJECT/*/*/*/Thumbs.db $BUILDROOT/$PROJECT/*/*/*/*/Thumbs.db`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/Thumbs.db $BUILDROOT/$PROJECT/*/Thumbs.db $BUILDROOT/$PROJECT/*/*/Thumbs.db $BUILDROOT/$PROJECT/*/*/*/Thumbs.db $BUILDROOT/$PROJECT/*/*/*/*/Thumbs.db`;
|
||||||
$ret=`rm -f $BUILDROOT/$PROJECT/.cvsignore $BUILDROOT/$PROJECT/*/.cvsignore $BUILDROOT/$PROJECT/*/*/.cvsignore $BUILDROOT/$PROJECT/*/*/*/.cvsignore $BUILDROOT/$PROJECT/*/*/*/*/.cvsignore $BUILDROOT/$PROJECT/*/*/*/*/*/.cvsignore $BUILDROOT/$PROJECT/*/*/*/*/*/*/.cvsignore`;
|
$ret=`rm -f $BUILDROOT/$PROJECT/.cvsignore $BUILDROOT/$PROJECT/*/.cvsignore $BUILDROOT/$PROJECT/*/*/.cvsignore $BUILDROOT/$PROJECT/*/*/*/.cvsignore $BUILDROOT/$PROJECT/*/*/*/*/.cvsignore $BUILDROOT/$PROJECT/*/*/*/*/*/.cvsignore $BUILDROOT/$PROJECT/*/*/*/*/*/*/.cvsignore`;
|
||||||
$ret=`rm -f $BUILDROOT/$PROJECT/.gitignore $BUILDROOT/$PROJECT/*/.gitignore $BUILDROOT/$PROJECT/*/*/.gitignore $BUILDROOT/$PROJECT/*/*/*/.gitignore $BUILDROOT/$PROJECT/*/*/*/*/.gitignore $BUILDROOT/$PROJECT/*/*/*/*/*/.gitignore $BUILDROOT/$PROJECT/*/*/*/*/*/*/.gitignore`;
|
$ret=`rm -f $BUILDROOT/$PROJECT/.gitignore $BUILDROOT/$PROJECT/*/.gitignore $BUILDROOT/$PROJECT/*/*/.gitignore $BUILDROOT/$PROJECT/*/*/*/.gitignore $BUILDROOT/$PROJECT/*/*/*/*/.gitignore $BUILDROOT/$PROJECT/*/*/*/*/*/.gitignore $BUILDROOT/$PROJECT/*/*/*/*/*/*/.gitignore`;
|
||||||
|
|
||||||
|
# Removed files installed by the awful composer
|
||||||
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/geoip/sample*.*`;
|
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/geoip/sample*.*`;
|
||||||
|
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/bin`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/ckeditor/ckeditor/adapters`; # Keep this removal in case we embed libraries
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/ckeditor/ckeditor/adapters`; # Keep this removal in case we embed libraries
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/ckeditor/ckeditor/samples`; # Keep this removal in case we embed libraries
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/ckeditor/ckeditor/samples`; # Keep this removal in case we embed libraries
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/ckeditor/_source`; # _source must be kept into tarball for official debian, not for the rest
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/ckeditor/_source`; # _source must be kept into tarball for official debian, not for the rest
|
||||||
|
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/composer`;
|
||||||
|
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/doctrine`;
|
||||||
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/jquery/plugins/multiselect/MIT-LICENSE.txt`;
|
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/jquery/plugins/multiselect/MIT-LICENSE.txt`;
|
||||||
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/jquery/plugins/select2/release.sh`;
|
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/jquery/plugins/select2/release.sh`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/mike42/escpos-php/doc`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/mike42/escpos-php/doc`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/mike42/escpos-php/example`;
|
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/mike42/escpos-php/example`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/mike42/escpos-php/test`;
|
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/mike42/escpos-php/test`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/mobiledetect/mobiledetectlib/.gitmodules`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/mobiledetect/mobiledetectlib/.gitmodules`;
|
||||||
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/mobiledetect/mobiledetectlib/docs`;
|
||||||
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/nnnick/chartjs/.github`;
|
||||||
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/nnnick/chartjs/docs`;
|
||||||
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/nnnick/chartjs/samples`;
|
||||||
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/nnnick/chartjs/scripts`;
|
||||||
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/nnnick/chartjs/src`;
|
||||||
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/nnnick/chartjs/test`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/nusoap/lib/Mail`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/nusoap/lib/Mail`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/nusoap/samples`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/nusoap/samples`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/parsedown/LICENSE.txt`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/parsedown/LICENSE.txt`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/php-iban/docs`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/php-iban/docs`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/phpoffice/phpexcel/.gitattributes`;
|
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/phpoffice/phpexcel/Classes/license.md`;
|
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/phpoffice/phpexcel/Classes/PHPExcel/Shared/PDF`;
|
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/phpoffice/phpexcel/Classes/PHPExcel/Shared/PCLZip`;
|
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/phpoffice/phpexcel/Examples`;
|
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/phpoffice/phpexcel/unitTests`;
|
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/phpoffice/phpexcel/license.md`;
|
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/sabre/sabre/*/tests`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/sabre/sabre/*/tests`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/stripe/tests`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/stripe/tests`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/stripe/LICENSE`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/stripe/LICENSE`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tcpdf/fonts/dejavu-fonts-ttf-*`;
|
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/tecnickcom/examples`;
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tcpdf/fonts/freefont-*`;
|
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tcpdf/fonts/ae_fonts_*`;
|
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tcpdf/fonts/utils`;
|
|
||||||
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/tcpdf/LICENSE.TXT`;
|
|
||||||
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-*`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-*`;
|
||||||
$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 -fr $BUILDROOT/$PROJECT/htdocs/includes/tecnickcom/tcpdf/tools`;
|
$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/includes/tecnickcom/tcpdf/tools`;
|
||||||
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/tecnickcom/tcpdf/LICENSE.TXT`;
|
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/tecnickcom/tcpdf/LICENSE.TXT`;
|
||||||
|
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/tecnickcom/tcpdf/tools`;
|
||||||
|
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/includes/vendor`;
|
||||||
|
$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`;
|
||||||
|
|
||||||
$ret=`rm -f $BUILDROOT/$PROJECT/htdocs/theme/common/octicons/LICENSE`;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Build package for each target
|
# Build package for each target
|
||||||
|
|||||||
@ -274,7 +274,6 @@ then
|
|||||||
#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
|
||||||
#grep -q -c "dolibarr_lib_PHPEXCEL_PATH" $config || echo "<?php \$dolibarr_lib_PHPEXCEL_PATH=''; ?>" >> $config
|
|
||||||
#grep -q -c "dolibarr_lib_TCPDF_PATH" $config || echo "<?php \$dolibarr_lib_TCPDF_PATH=''; ?>" >> $config
|
#grep -q -c "dolibarr_lib_TCPDF_PATH" $config || echo "<?php \$dolibarr_lib_TCPDF_PATH=''; ?>" >> $config
|
||||||
grep -q -c "dolibarr_js_CKEDITOR" $config || [ ! -d "/usr/share/javascript/ckeditor" ] || echo "<?php \$dolibarr_js_CKEDITOR='/javascript/ckeditor'; ?>" >> $config
|
grep -q -c "dolibarr_js_CKEDITOR" $config || [ ! -d "/usr/share/javascript/ckeditor" ] || echo "<?php \$dolibarr_js_CKEDITOR='/javascript/ckeditor'; ?>" >> $config
|
||||||
grep -q -c "dolibarr_js_JQUERY" $config || [ ! -d "/usr/share/javascript/jquery" ] || echo "<?php \$dolibarr_js_JQUERY='/javascript/jquery'; ?>" >> $config
|
grep -q -c "dolibarr_js_JQUERY" $config || [ ! -d "/usr/share/javascript/jquery" ] || echo "<?php \$dolibarr_js_JQUERY='/javascript/jquery'; ?>" >> $config
|
||||||
|
|||||||
@ -292,6 +292,7 @@ done >>%{name}.lang
|
|||||||
%_datadir/dolibarr/htdocs/product
|
%_datadir/dolibarr/htdocs/product
|
||||||
%_datadir/dolibarr/htdocs/projet
|
%_datadir/dolibarr/htdocs/projet
|
||||||
%_datadir/dolibarr/htdocs/public
|
%_datadir/dolibarr/htdocs/public
|
||||||
|
%_datadir/dolibarr/htdocs/recruitment
|
||||||
%_datadir/dolibarr/htdocs/reception
|
%_datadir/dolibarr/htdocs/reception
|
||||||
%_datadir/dolibarr/htdocs/resource
|
%_datadir/dolibarr/htdocs/resource
|
||||||
%_datadir/dolibarr/htdocs/salaries
|
%_datadir/dolibarr/htdocs/salaries
|
||||||
@ -424,7 +425,6 @@ then
|
|||||||
#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
|
||||||
#grep -q -c "dolibarr_lib_PHPEXCEL_PATH" $config || echo "<?php \$dolibarr_lib_PHPEXCEL_PATH=''; ?>" >> $config
|
|
||||||
#grep -q -c "dolibarr_lib_TCPDF_PATH" $config || echo "<?php \$dolibarr_lib_TCPDF_PATH=''; ?>" >> $config
|
#grep -q -c "dolibarr_lib_TCPDF_PATH" $config || echo "<?php \$dolibarr_lib_TCPDF_PATH=''; ?>" >> $config
|
||||||
grep -q -c "dolibarr_js_CKEDITOR" $config || [ ! -d "/usr/share/javascript/ckeditor" ] || echo "<?php \$dolibarr_js_CKEDITOR='/javascript/ckeditor'; ?>" >> $config
|
grep -q -c "dolibarr_js_CKEDITOR" $config || [ ! -d "/usr/share/javascript/ckeditor" ] || echo "<?php \$dolibarr_js_CKEDITOR='/javascript/ckeditor'; ?>" >> $config
|
||||||
grep -q -c "dolibarr_js_JQUERY" $config || [ ! -d "/usr/share/javascript/jquery" ] || echo "<?php \$dolibarr_js_JQUERY='/javascript/jquery'; ?>" >> $config
|
grep -q -c "dolibarr_js_JQUERY" $config || [ ! -d "/usr/share/javascript/jquery" ] || echo "<?php \$dolibarr_js_JQUERY='/javascript/jquery'; ?>" >> $config
|
||||||
|
|||||||
@ -209,6 +209,7 @@ done >>%{name}.lang
|
|||||||
%_datadir/dolibarr/htdocs/product
|
%_datadir/dolibarr/htdocs/product
|
||||||
%_datadir/dolibarr/htdocs/projet
|
%_datadir/dolibarr/htdocs/projet
|
||||||
%_datadir/dolibarr/htdocs/public
|
%_datadir/dolibarr/htdocs/public
|
||||||
|
%_datadir/dolibarr/htdocs/recruitment
|
||||||
%_datadir/dolibarr/htdocs/reception
|
%_datadir/dolibarr/htdocs/reception
|
||||||
%_datadir/dolibarr/htdocs/resource
|
%_datadir/dolibarr/htdocs/resource
|
||||||
%_datadir/dolibarr/htdocs/salaries
|
%_datadir/dolibarr/htdocs/salaries
|
||||||
@ -271,7 +272,6 @@ then
|
|||||||
#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
|
||||||
#grep -q -c "dolibarr_lib_PHPEXCEL_PATH" $config || echo "<?php \$dolibarr_lib_PHPEXCEL_PATH=''; ?>" >> $config
|
|
||||||
#grep -q -c "dolibarr_lib_TCPDF_PATH" $config || echo "<?php \$dolibarr_lib_TCPDF_PATH=''; ?>" >> $config
|
#grep -q -c "dolibarr_lib_TCPDF_PATH" $config || echo "<?php \$dolibarr_lib_TCPDF_PATH=''; ?>" >> $config
|
||||||
grep -q -c "dolibarr_js_CKEDITOR" $config || [ ! -d "/usr/share/javascript/ckeditor" ] || echo "<?php \$dolibarr_js_CKEDITOR='/javascript/ckeditor'; ?>" >> $config
|
grep -q -c "dolibarr_js_CKEDITOR" $config || [ ! -d "/usr/share/javascript/ckeditor" ] || echo "<?php \$dolibarr_js_CKEDITOR='/javascript/ckeditor'; ?>" >> $config
|
||||||
grep -q -c "dolibarr_js_JQUERY" $config || [ ! -d "/usr/share/javascript/jquery" ] || echo "<?php \$dolibarr_js_JQUERY='/javascript/jquery'; ?>" >> $config
|
grep -q -c "dolibarr_js_JQUERY" $config || [ ! -d "/usr/share/javascript/jquery" ] || echo "<?php \$dolibarr_js_JQUERY='/javascript/jquery'; ?>" >> $config
|
||||||
|
|||||||
@ -220,6 +220,7 @@ done >>%{name}.lang
|
|||||||
%_datadir/dolibarr/htdocs/product
|
%_datadir/dolibarr/htdocs/product
|
||||||
%_datadir/dolibarr/htdocs/projet
|
%_datadir/dolibarr/htdocs/projet
|
||||||
%_datadir/dolibarr/htdocs/public
|
%_datadir/dolibarr/htdocs/public
|
||||||
|
%_datadir/dolibarr/htdocs/recruitment
|
||||||
%_datadir/dolibarr/htdocs/reception
|
%_datadir/dolibarr/htdocs/reception
|
||||||
%_datadir/dolibarr/htdocs/resource
|
%_datadir/dolibarr/htdocs/resource
|
||||||
%_datadir/dolibarr/htdocs/salaries
|
%_datadir/dolibarr/htdocs/salaries
|
||||||
@ -282,7 +283,6 @@ then
|
|||||||
#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
|
||||||
#grep -q -c "dolibarr_lib_PHPEXCEL_PATH" $config || echo "<?php \$dolibarr_lib_PHPEXCEL_PATH=''; ?>" >> $config
|
|
||||||
#grep -q -c "dolibarr_lib_TCPDF_PATH" $config || echo "<?php \$dolibarr_lib_TCPDF_PATH=''; ?>" >> $config
|
#grep -q -c "dolibarr_lib_TCPDF_PATH" $config || echo "<?php \$dolibarr_lib_TCPDF_PATH=''; ?>" >> $config
|
||||||
grep -q -c "dolibarr_js_CKEDITOR" $config || [ ! -d "/usr/share/javascript/ckeditor" ] || echo "<?php \$dolibarr_js_CKEDITOR='/javascript/ckeditor'; ?>" >> $config
|
grep -q -c "dolibarr_js_CKEDITOR" $config || [ ! -d "/usr/share/javascript/ckeditor" ] || echo "<?php \$dolibarr_js_CKEDITOR='/javascript/ckeditor'; ?>" >> $config
|
||||||
grep -q -c "dolibarr_js_JQUERY" $config || [ ! -d "/usr/share/javascript/jquery" ] || echo "<?php \$dolibarr_js_JQUERY='/javascript/jquery'; ?>" >> $config
|
grep -q -c "dolibarr_js_JQUERY" $config || [ ! -d "/usr/share/javascript/jquery" ] || echo "<?php \$dolibarr_js_JQUERY='/javascript/jquery'; ?>" >> $config
|
||||||
|
|||||||
@ -25,7 +25,6 @@ $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';
|
||||||
$force_dolibarr_lib_PHPEXCEL_PATH='';
|
|
||||||
$force_dolibarr_lib_TCPDF_PATH='';
|
$force_dolibarr_lib_TCPDF_PATH='';
|
||||||
//$force_dolibarr_js_CKEDITOR='/javascript/ckeditor';
|
//$force_dolibarr_js_CKEDITOR='/javascript/ckeditor';
|
||||||
//$force_dolibarr_js_JQUERY='/javascript/jquery';
|
//$force_dolibarr_js_JQUERY='/javascript/jquery';
|
||||||
|
|||||||
@ -25,7 +25,6 @@ $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';
|
||||||
$force_dolibarr_lib_PHPEXCEL_PATH='';
|
|
||||||
$force_dolibarr_lib_TCPDF_PATH='';
|
$force_dolibarr_lib_TCPDF_PATH='';
|
||||||
//$force_dolibarr_js_CKEDITOR='/javascript/ckeditor';
|
//$force_dolibarr_js_CKEDITOR='/javascript/ckeditor';
|
||||||
//$force_dolibarr_js_JQUERY='/javascript/jquery';
|
//$force_dolibarr_js_JQUERY='/javascript/jquery';
|
||||||
|
|||||||
@ -25,7 +25,6 @@ $force_install_distrib='rpmopensuse';
|
|||||||
//$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';
|
||||||
$force_dolibarr_lib_PHPEXCEL_PATH='';
|
|
||||||
$force_dolibarr_lib_TCPDF_PATH='';
|
$force_dolibarr_lib_TCPDF_PATH='';
|
||||||
//$force_dolibarr_js_CKEDITOR='/javascript/ckeditor';
|
//$force_dolibarr_js_CKEDITOR='/javascript/ckeditor';
|
||||||
//$force_dolibarr_js_JQUERY='/javascript/jquery';
|
//$force_dolibarr_js_JQUERY='/javascript/jquery';
|
||||||
|
|||||||
@ -35,7 +35,7 @@
|
|||||||
"nnnick/chartjs" : "^2.9",
|
"nnnick/chartjs" : "^2.9",
|
||||||
"stripe/stripe-php" : "6.43.1",
|
"stripe/stripe-php" : "6.43.1",
|
||||||
"maximebf/debugbar" : "1.15.1",
|
"maximebf/debugbar" : "1.15.1",
|
||||||
"symfony/var-dumper": "3"
|
"symfony/var-dumper" : "3"
|
||||||
},
|
},
|
||||||
"require-dev" : {
|
"require-dev" : {
|
||||||
"php-parallel-lint/php-parallel-lint" : "^0",
|
"php-parallel-lint/php-parallel-lint" : "^0",
|
||||||
@ -59,4 +59,4 @@
|
|||||||
"ext-zip" : "ODT, Excel and file compression support",
|
"ext-zip" : "ODT, Excel and file compression support",
|
||||||
"ext-xml" : "Excel support"
|
"ext-xml" : "Excel support"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
592
composer.lock
generated
592
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@ -48,6 +48,14 @@ By
|
|||||||
* In file nusoap.php, to avoid a warning,
|
* In file nusoap.php, to avoid a warning,
|
||||||
Replace call to serialize_val with no bugged value
|
Replace call to serialize_val with no bugged value
|
||||||
|
|
||||||
|
* In all files, replace constructor names into __construct. Replace also parent::constructor_name with parent::__construct
|
||||||
|
|
||||||
|
* Line 4222 of file nusoap.php
|
||||||
|
|
||||||
|
$rev = array();
|
||||||
|
preg_match('/\$Revision: ([^ ]+)/', $this->revision, $rev);
|
||||||
|
$this->outgoing_headers[] = "X-SOAP-Server: $this->title/$this->version (".(isset($rev[1]) ? $rev[1] : '').")";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -217,14 +225,6 @@ JQUERYFILETREE:
|
|||||||
* Remove directory htdocs/includes/jquery/plugins/jqueryFileTree/connectors
|
* Remove directory htdocs/includes/jquery/plugins/jqueryFileTree/connectors
|
||||||
|
|
||||||
|
|
||||||
PHPEXCEL:
|
|
||||||
---------
|
|
||||||
* Replace in htdocs/includes/phpoffice/phpexcel/Classes/PHPExcel/Shared/OLE.php
|
|
||||||
continue;
|
|
||||||
with:
|
|
||||||
continue 2;
|
|
||||||
|
|
||||||
|
|
||||||
RESTLER:
|
RESTLER:
|
||||||
--------
|
--------
|
||||||
Change content of file htdocs/includes/restler/framework/Luracast/Restler/explorer/index.html
|
Change content of file htdocs/includes/restler/framework/Luracast/Restler/explorer/index.html
|
||||||
@ -236,11 +236,21 @@ Change content of file htdocs/includes/restler/framework/Luracast/Restler/explor
|
|||||||
public static function getShortName($className)
|
public static function getShortName($className)
|
||||||
{
|
{
|
||||||
// @CHANGE LDR
|
// @CHANGE LDR
|
||||||
if (! is_string($className)) return;
|
if (!is_string($className)) return;
|
||||||
//var_dump($className);
|
//var_dump($className);
|
||||||
|
|
||||||
|
* Add line into Data/Text.php to complete function
|
||||||
|
|
||||||
|
public static function endsWith($haystack, $needle)
|
||||||
|
{
|
||||||
|
$length = strlen($needle);
|
||||||
|
if ($length == 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// @CHANGE LDR
|
||||||
|
if (!is_string($haystack)) return false;
|
||||||
|
|
||||||
|
|
||||||
PARSEDOWN
|
PARSEDOWN
|
||||||
---------
|
---------
|
||||||
|
|
||||||
@ -306,7 +316,7 @@ SELECT2
|
|||||||
Edit CSS to restore line removed between 4.0.5 and 4.0.6. It generates this bug: https://github.com/select2/select2/issues/5832
|
Edit CSS to restore line removed between 4.0.5 and 4.0.6. It generates this bug: https://github.com/select2/select2/issues/5832
|
||||||
|
|
||||||
.select2-hidden-accessible {
|
.select2-hidden-accessible {
|
||||||
margin: -1px !important; /* line to restore */
|
margin: -10000px !important; /* line to restore */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
"npm": ">=5.6.0"
|
"npm": ">=5.6.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"zapier-platform-core": "10.1.1"
|
"zapier-platform-core": "10.1.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"mocha": "^5.2.0",
|
"mocha": "^5.2.0",
|
||||||
|
|||||||
@ -12,6 +12,11 @@ The script initdemo.sh will erase current database with data into mysqldump_doli
|
|||||||
Do a chmod 700 initdemo.sh
|
Do a chmod 700 initdemo.sh
|
||||||
then run ./initdemo.sh to launch Graphic User Interface.
|
then run ./initdemo.sh to launch Graphic User Interface.
|
||||||
|
|
||||||
|
After loading the demo files, admin login may be:
|
||||||
|
- admin / admin
|
||||||
|
or
|
||||||
|
- admin / adminadmin
|
||||||
|
|
||||||
|
|
||||||
*** Save demo
|
*** Save demo
|
||||||
|
|
||||||
|
|||||||
@ -189,8 +189,8 @@ export res=$?
|
|||||||
export documentdir=`cat $mydir/../../htdocs/conf/conf.php | grep '^\$dolibarr_main_data_root' | sed -e 's/$dolibarr_main_data_root=//' | sed -e 's/;//' | sed -e "s/'//g" | sed -e 's/"//g' `
|
export documentdir=`cat $mydir/../../htdocs/conf/conf.php | grep '^\$dolibarr_main_data_root' | sed -e 's/$dolibarr_main_data_root=//' | sed -e 's/;//' | sed -e "s/'//g" | sed -e 's/"//g' `
|
||||||
if [ "x$documentdir" != "x" ]
|
if [ "x$documentdir" != "x" ]
|
||||||
then
|
then
|
||||||
$DIALOG --title "Reset document directory tpp" --clear \
|
$DIALOG --title "Reset document directory" --clear \
|
||||||
--inputbox "Delete and recreate document directory $documentdir/:" 16 55 n 2> $fichtemp
|
--inputbox "DELETE and recreate document directory $documentdir/:" 16 55 n 2> $fichtemp
|
||||||
|
|
||||||
valret=$?
|
valret=$?
|
||||||
|
|
||||||
|
|||||||
@ -53,7 +53,7 @@ then
|
|||||||
DIALOG="$DIALOG --ascii-lines"
|
DIALOG="$DIALOG --ascii-lines"
|
||||||
fichtemp=`tempfile 2>/dev/null` || fichtemp=/tmp/test$$
|
fichtemp=`tempfile 2>/dev/null` || fichtemp=/tmp/test$$
|
||||||
trap "rm -f $fichtemp" 0 1 2 5 15
|
trap "rm -f $fichtemp" 0 1 2 5 15
|
||||||
$DIALOG --title "Init Dolibarr with demo values" --clear \
|
$DIALOG --title "Reset login password" --clear \
|
||||||
--inputbox "Mysql database name :" 16 55 dolibarrdemo 2> $fichtemp
|
--inputbox "Mysql database name :" 16 55 dolibarrdemo 2> $fichtemp
|
||||||
valret=$?
|
valret=$?
|
||||||
case $valret in
|
case $valret in
|
||||||
@ -70,7 +70,7 @@ then
|
|||||||
DIALOG=${DIALOG=dialog}
|
DIALOG=${DIALOG=dialog}
|
||||||
fichtemp=`tempfile 2>/dev/null` || fichtemp=/tmp/test$$
|
fichtemp=`tempfile 2>/dev/null` || fichtemp=/tmp/test$$
|
||||||
trap "rm -f $fichtemp" 0 1 2 5 15
|
trap "rm -f $fichtemp" 0 1 2 5 15
|
||||||
$DIALOG --title "Init Dolibarr with demo values" --clear \
|
$DIALOG --title "Reset login password" --clear \
|
||||||
--inputbox "Mysql port (ex: 3306):" 16 55 3306 2> $fichtemp
|
--inputbox "Mysql port (ex: 3306):" 16 55 3306 2> $fichtemp
|
||||||
|
|
||||||
valret=$?
|
valret=$?
|
||||||
@ -128,7 +128,7 @@ then
|
|||||||
|
|
||||||
# ---------------------------- confirmation
|
# ---------------------------- confirmation
|
||||||
DIALOG=${DIALOG=dialog}
|
DIALOG=${DIALOG=dialog}
|
||||||
$DIALOG --title "Init demo login with demo values" --clear \
|
$DIALOG --title "Reset login password" --clear \
|
||||||
--yesno "Do you confirm ? \n Mysql database : '$base' \n Mysql port : '$port' \n Demo login: '$demologin' \n Demo password : '$demopass'" 15 55
|
--yesno "Do you confirm ? \n Mysql database : '$base' \n Mysql port : '$port' \n Demo login: '$demologin' \n Demo password : '$demopass'" 15 55
|
||||||
|
|
||||||
case $? in
|
case $? in
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
BIN
dev/resources/intracommreport/manuelDebXml1.2.pdf
Normal file
BIN
dev/resources/intracommreport/manuelDebXml1.2.pdf
Normal file
Binary file not shown.
139
dev/resources/intracommreport/schema_deb.xsd
Normal file
139
dev/resources/intracommreport/schema_deb.xsd
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
||||||
|
<xsd:element name="INSTAT">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element ref="Envelope"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="Envelope">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element ref="envelopeId"/>
|
||||||
|
<xsd:element ref="DateTime"/>
|
||||||
|
<xsd:element ref="Party"/>
|
||||||
|
<xsd:element ref="softwareUsed" minOccurs="0"/>
|
||||||
|
<xsd:element ref="Declaration" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="envelopeId" type="xsd:string"/>
|
||||||
|
<xsd:element name="DateTime">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element ref="date"/>
|
||||||
|
<xsd:element ref="time" minOccurs="0"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="Party">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element ref="partyId"/>
|
||||||
|
<xsd:element ref="partyName"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="partyType" use="required">
|
||||||
|
<xsd:simpleType>
|
||||||
|
<xsd:restriction base="xsd:NMTOKEN">
|
||||||
|
<xsd:enumeration value="PSI"/>
|
||||||
|
<xsd:enumeration value="TDP"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
</xsd:attribute>
|
||||||
|
<xsd:attribute name="partyRole" use="required">
|
||||||
|
<xsd:simpleType>
|
||||||
|
<xsd:restriction base="xsd:NMTOKEN">
|
||||||
|
<xsd:enumeration value="sender"/>
|
||||||
|
<xsd:enumeration value="PSI"/>
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
</xsd:attribute>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="partyId" type="xsd:string"/>
|
||||||
|
<xsd:element name="partyName" type="xsd:string"/>
|
||||||
|
<xsd:element name="softwareUsed" type="xsd:string"/>
|
||||||
|
<xsd:element name="Declaration">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element ref="declarationId"/>
|
||||||
|
<xsd:element ref="referencePeriod"/>
|
||||||
|
<xsd:element ref="PSIId"/>
|
||||||
|
<xsd:element ref="Function"/>
|
||||||
|
<xsd:element ref="declarationTypeCode"/>
|
||||||
|
<xsd:element ref="flowCode"/>
|
||||||
|
<xsd:element ref="currencyCode"/>
|
||||||
|
<xsd:element ref="Item" maxOccurs="unbounded"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="declarationId" type="xsd:string"/>
|
||||||
|
<xsd:element name="referencePeriod" type="xsd:string"/>
|
||||||
|
<xsd:element name="PSIId" type="xsd:string"/>
|
||||||
|
<xsd:element name="Function">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element ref="functionCode"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="functionCode" type="xsd:string"/>
|
||||||
|
<xsd:element name="declarationTypeCode" type="xsd:string"/>
|
||||||
|
<xsd:element name="flowCode" type="xsd:string"/>
|
||||||
|
<xsd:element name="currencyCode" type="xsd:string"/>
|
||||||
|
<xsd:element name="Item">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element ref="itemNumber"/>
|
||||||
|
<xsd:element ref="CN8" minOccurs="0"/>
|
||||||
|
<xsd:element ref="MSConsDestCode" minOccurs="0"/>
|
||||||
|
<xsd:element ref="countryOfOriginCode" minOccurs="0"/>
|
||||||
|
<xsd:element ref="netMass" minOccurs="0"/>
|
||||||
|
<xsd:element ref="quantityInSU" minOccurs="0"/>
|
||||||
|
<xsd:element ref="invoicedAmount"/>
|
||||||
|
<xsd:element ref="partnerId" minOccurs="0"/>
|
||||||
|
<xsd:element ref="invoicedNumber" minOccurs="0"/>
|
||||||
|
<xsd:element ref="statisticalProcedureCode" />
|
||||||
|
<xsd:element ref="NatureOfTransaction" minOccurs="0"/>
|
||||||
|
<xsd:element ref="modeOfTransportCode" minOccurs="0"/>
|
||||||
|
<xsd:element ref="regionCode" minOccurs="0"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="itemNumber" type="xsd:integer"/>
|
||||||
|
<xsd:element name="CN8">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element ref="CN8Code" minOccurs="0"/>
|
||||||
|
<xsd:element ref="SUCode" minOccurs="0"/>
|
||||||
|
<xsd:element ref="additionalGoodsCode" minOccurs="0"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="CN8Code" type="xsd:string"/>
|
||||||
|
<xsd:element name="SUCode" type="xsd:string"/>
|
||||||
|
<xsd:element name="additionalGoodsCode" type="xsd:string"/>
|
||||||
|
<xsd:element name="MSConsDestCode" type="xsd:string"/>
|
||||||
|
<xsd:element name="countryOfOriginCode" type="xsd:string"/>
|
||||||
|
<xsd:element name="netMass" type="xsd:integer"/>
|
||||||
|
<xsd:element name="quantityInSU" type="xsd:integer"/>
|
||||||
|
<xsd:element name="invoicedAmount" type="xsd:integer"/>
|
||||||
|
<xsd:element name="partnerId" type="xsd:string"/>
|
||||||
|
<xsd:element name="invoicedNumber" type="xsd:string"/>
|
||||||
|
<xsd:element name="statisticalProcedureCode" type="xsd:integer"/>
|
||||||
|
<xsd:element name="NatureOfTransaction">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element ref="natureOfTransactionACode"/>
|
||||||
|
<xsd:element ref="natureOfTransactionBCode" minOccurs="0"/>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="natureOfTransactionACode" type="xsd:string"/>
|
||||||
|
<xsd:element name="natureOfTransactionBCode" type="xsd:string"/>
|
||||||
|
<xsd:element name="modeOfTransportCode" type="xsd:string"/>
|
||||||
|
<xsd:element name="regionCode" type="xsd:string"/>
|
||||||
|
<xsd:element name="date" type="xsd:date"/>
|
||||||
|
<xsd:element name="time" type="xsd:time"/>
|
||||||
|
</xsd:schema>
|
||||||
2
dev/resources/iso-normes/company_ids.txt
Normal file
2
dev/resources/iso-normes/company_ids.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Spain https://incwell.eu/en/company-formation-spain/
|
||||||
|
France https://www.economie.gouv.fr/entreprises/numeros-identification-entreprise
|
||||||
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<exclude-pattern type="relative">build/html</exclude-pattern>
|
<exclude-pattern type="relative">build/html</exclude-pattern>
|
||||||
<exclude-pattern type="relative">build/aps</exclude-pattern>
|
<exclude-pattern type="relative">build/aps</exclude-pattern>
|
||||||
<exclude-pattern type="relative">dev/namespacemig</exclude-pattern>
|
<exclude-pattern type="relative">dev/tools/test/namespacemig</exclude-pattern>
|
||||||
<exclude-pattern type="relative">dev/initdata/dbf/includes</exclude-pattern>
|
<exclude-pattern type="relative">dev/initdata/dbf/includes</exclude-pattern>
|
||||||
<exclude-pattern type="relative">documents</exclude-pattern>
|
<exclude-pattern type="relative">documents</exclude-pattern>
|
||||||
<exclude-pattern type="relative">htdocs/core/class/lessc.class.php</exclude-pattern>
|
<exclude-pattern type="relative">htdocs/core/class/lessc.class.php</exclude-pattern>
|
||||||
|
|||||||
@ -15,6 +15,9 @@ function faaa()
|
|||||||
return 'faaa';
|
return 'faaa';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class Aaa
|
||||||
|
*/
|
||||||
class Aaa
|
class Aaa
|
||||||
{
|
{
|
||||||
const AAA='aaa';
|
const AAA='aaa';
|
||||||
@ -12,6 +12,9 @@ function fbbb()
|
|||||||
return 'fbbb';
|
return 'fbbb';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class Bbb
|
||||||
|
*/
|
||||||
class Bbb
|
class Bbb
|
||||||
{
|
{
|
||||||
const BBB='bbb';
|
const BBB='bbb';
|
||||||
@ -2,13 +2,18 @@ README (English)
|
|||||||
--------------------------------
|
--------------------------------
|
||||||
This directory contains tools to generate translation files for a new
|
This directory contains tools to generate translation files for a new
|
||||||
languages or to update translation files for existing languages.
|
languages or to update translation files for existing languages.
|
||||||
|
|
||||||
See Dolibarr Wiki page:
|
See Dolibarr Wiki page:
|
||||||
https://wiki.dolibarr.org/index.php/Translator_documentation
|
https://wiki.dolibarr.org/index.php/Translator_documentation
|
||||||
For more information on how to use them.
|
For more information on how to use them.
|
||||||
|
|
||||||
for Linux OS:
|
Translation of Dolibarr Project at Transifex:
|
||||||
To install transifex client:
|
https://www.transifex.com/dolibarr-association/dolibarr/dashboard/
|
||||||
|
|
||||||
|
|
||||||
|
Installation of Transifex Client:
|
||||||
|
---------------------------------
|
||||||
|
for Linux OS
|
||||||
|
to install or to update transifex client:
|
||||||
sudo pip install --upgrade transifex-client
|
sudo pip install --upgrade transifex-client
|
||||||
|
|
||||||
To update transifex client:
|
|
||||||
sudo pip install --upgrade transifex-client
|
|
||||||
|
|||||||
@ -21,8 +21,8 @@
|
|||||||
* \ingroup dev
|
* \ingroup dev
|
||||||
* \brief This script uses google language ajax api as the translator engine
|
* \brief This script uses google language ajax api as the translator engine
|
||||||
* The main translator function can be found at:
|
* The main translator function can be found at:
|
||||||
* http://code.google.com/intl/fr/apis/language/translate/overview.html
|
* defunct -http://code.google.com/intl/fr/apis/language/translate/overview.html-
|
||||||
* http://translate.google.com/translate_tools
|
* defunct -http://translate.google.com/translate_tools-
|
||||||
* https://code.google.com/apis/console
|
* https://code.google.com/apis/console
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -58,7 +58,7 @@ $dir=DOL_DOCUMENT_ROOT."/langs";
|
|||||||
if (! isset($argv[3])) {
|
if (! isset($argv[3])) {
|
||||||
print "Usage: ".$script_file." lang_code_src lang_code_dest|all APIKEY [langfile.lang]\n";
|
print "Usage: ".$script_file." lang_code_src lang_code_dest|all APIKEY [langfile.lang]\n";
|
||||||
print "Example: ".$script_file." en_US pt_PT 123456\n";
|
print "Example: ".$script_file." en_US pt_PT 123456\n";
|
||||||
print "Rem: lang_code to use can be found on http://www.google.com/language_tools\n";
|
print "Rem: lang_code to use can be found on https://translate.google.com\n";
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,25 +0,0 @@
|
|||||||
comparison of terms
|
|
||||||
|
|
||||||
|
|
||||||
Dolibarr SAP ERP Odoo
|
|
||||||
-------------------------------------------------------------------------
|
|
||||||
Thirdparty Contact partner Partner/Contact (company)
|
|
||||||
Contact/address Contact person Partner/Contact (individual)
|
|
||||||
|
|
||||||
Financial Finance (FI) Accounting
|
|
||||||
Accounting
|
|
||||||
|
|
||||||
|
|
||||||
Income / Expense ?? Profit / Loss
|
|
||||||
Balance ?? Net profit
|
|
||||||
Subledger account Subledger account ??
|
|
||||||
|
|
||||||
CRM Sales & Distribution Sales
|
|
||||||
Proposal ?? Quotation
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Proposal is ok but proposition looks better (proposal is for a detailed proposition).
|
|
||||||
We can say also "business proposition or business proposal".
|
|
||||||
In India they are using "Quotation".
|
|
||||||
|
|
||||||
@ -1,33 +1,45 @@
|
|||||||
README (deutsch / german / allemand)
|
README (deutsch / german / allemand)
|
||||||
--------------------------------
|
------------------------------------
|
||||||
|
|
||||||
|
|
||||||
--------------------------------
|
------------------------------------
|
||||||
Download / Herunterladen
|
Download / Herunterladen
|
||||||
--------------------------------
|
------------------------------------
|
||||||
|
|
||||||
* Dolibarr ERP/CRM kann man über die offizielle Dolibarr Website
|
* Dolibarr ERP/CRM kann man über die offizielle Dolibarr Website
|
||||||
|
|
||||||
https://www.dolibarr.org/downloads
|
https://www.dolibarr.org/downloads
|
||||||
oder direkt von Sourceforge
|
|
||||||
|
oder direkt bei Sourceforge
|
||||||
|
|
||||||
https://sourceforge.net/projects/dolibarr/files/
|
https://sourceforge.net/projects/dolibarr/files/
|
||||||
|
|
||||||
herunterladen.
|
herunterladen.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* Die meisten externen Module/Themens sind über den DoliStore verfügbar:
|
|
||||||
https://www.dolistore.com/de/
|
|
||||||
|
|
||||||
|
|
||||||
--------------------------------
|
|
||||||
Installation
|
|
||||||
--------------------------------
|
|
||||||
|
|
||||||
* Für eine kurze Einleitung, schau auf die README Datei im Hauptverzeichnis.
|
------------------------------------
|
||||||
|
Installation / Hilfe
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
* Für eine kurze Einleitung schau in die README Datei im Hauptverzeichnis.
|
||||||
|
|
||||||
* Umfangreiche Dokumentationen sind im Dolibarr Wiki zu finden:
|
* Umfangreiche Dokumentationen sind im Dolibarr Wiki zu finden:
|
||||||
https://wiki.dolibarr.org/index.php/Hauptseite
|
https://wiki.dolibarr.org/index.php/Hauptseite
|
||||||
|
|
||||||
* eine Deutsche Community bietet der Dolibarr e.V. unter
|
* eine Deutsche Community bietet der Dolibarr e.V. unter
|
||||||
https://www.dolibarr.de/
|
https://www.dolibarr.de/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------
|
||||||
|
Zusatzmodule
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
* Die meisten externen Module/Themen sind über den offiziellen DoliStore verfügbar:
|
||||||
|
|
||||||
|
https://www.dolistore.com/de/
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -6,13 +6,14 @@ README (french)
|
|||||||
Téléchargement
|
Téléchargement
|
||||||
--------------------------------
|
--------------------------------
|
||||||
|
|
||||||
* Dolibarr ERP/CRM can be downloaded at sourceforge:
|
* Dolibarr ERP/CRM peut être téléchargé sur sourceforge:
|
||||||
http://sourceforge.net/projects/dolibarr/files
|
https://sourceforge.net/projects/dolibarr/files
|
||||||
or from Dolibarr official web site:
|
|
||||||
|
ou sur le site officiel de Dolibarr:
|
||||||
https://www.dolibarr.org
|
https://www.dolibarr.org
|
||||||
|
|
||||||
* Most external modules are only available on DoliStore:
|
* La plupart des modules externes ne sont disponibles que sur le DoliStore officiel:
|
||||||
https://www.dolistore.org
|
https://www.dolistore.com
|
||||||
|
|
||||||
|
|
||||||
--------------------------------
|
--------------------------------
|
||||||
@ -24,4 +25,4 @@ README-FR à la racine.
|
|||||||
|
|
||||||
* Une documentation utilisateur francophone plus consistante est disponible en
|
* Une documentation utilisateur francophone plus consistante est disponible en
|
||||||
ligne sur le wiki de Dolibarr à l'adresse:
|
ligne sur le wiki de Dolibarr à l'adresse:
|
||||||
https://wiki.dolibarr.org
|
https://wiki.dolibarr.org/index.php/Accueil
|
||||||
|
|||||||
@ -187,7 +187,7 @@ if (GETPOST('actionadd', 'alpha') || GETPOST('actionmodify', 'alpha'))
|
|||||||
$msg .= $langs->transnoentities('ErrorFieldFormat', $langs->transnoentities('Code')).'<br>';
|
$msg .= $langs->transnoentities('ErrorFieldFormat', $langs->transnoentities('Code')).'<br>';
|
||||||
}*/
|
}*/
|
||||||
}
|
}
|
||||||
if (isset($_POST["country"]) && ($_POST["country"] == '0') && ($id != 2))
|
if (GETPOSTISSET("country") && (GETPOST("country") == '0') && ($id != 2))
|
||||||
{
|
{
|
||||||
$ok = 0;
|
$ok = 0;
|
||||||
setEventMessages($langs->transnoentities("ErrorFieldRequired", $langs->transnoentities("Country")), null, 'errors');
|
setEventMessages($langs->transnoentities("ErrorFieldRequired", $langs->transnoentities("Country")), null, 'errors');
|
||||||
@ -609,7 +609,7 @@ if ($id)
|
|||||||
if (empty($reshook)) fieldListAccountModel($fieldlist, $obj, $tabname[$id], 'edit');
|
if (empty($reshook)) fieldListAccountModel($fieldlist, $obj, $tabname[$id], 'edit');
|
||||||
|
|
||||||
print '<td colspan="3" class="right"><a name="'.(!empty($obj->rowid) ? $obj->rowid : $obj->code).'"> </a><input type="submit" class="button" name="actionmodify" value="'.$langs->trans("Modify").'">';
|
print '<td colspan="3" class="right"><a name="'.(!empty($obj->rowid) ? $obj->rowid : $obj->code).'"> </a><input type="submit" class="button" name="actionmodify" value="'.$langs->trans("Modify").'">';
|
||||||
print ' <input type="submit" class="button" name="actioncancel" value="'.$langs->trans("Cancel").'"></td>';
|
print ' <input type="submit" class="button button-cancel" name="actioncancel" value="'.$langs->trans("Cancel").'"></td>';
|
||||||
} else {
|
} else {
|
||||||
$tmpaction = 'view';
|
$tmpaction = 'view';
|
||||||
$parameters = array('var'=>$var, 'fieldlist'=>$fieldlist, 'tabname'=>$tabname[$id]);
|
$parameters = array('var'=>$var, 'fieldlist'=>$fieldlist, 'tabname'=>$tabname[$id]);
|
||||||
|
|||||||
@ -247,7 +247,7 @@ if ($action == 'create') {
|
|||||||
// Chart of accounts type
|
// Chart of accounts type
|
||||||
print '<tr><td>'.$langs->trans("Pcgtype").'</td>';
|
print '<tr><td>'.$langs->trans("Pcgtype").'</td>';
|
||||||
print '<td>';
|
print '<td>';
|
||||||
print '<input type="text" name="pcg_type" value="'.dol_escape_htmltag(isset($_POST['pcg_type']) ?GETPOST('pcg_type', 'alpha') : $object->pcg_type).'">';
|
print '<input type="text" name="pcg_type" value="'.dol_escape_htmltag(GETPOSTISSET('pcg_type') ? GETPOST('pcg_type', 'alpha') : $object->pcg_type).'">';
|
||||||
print '</td></tr>';
|
print '</td></tr>';
|
||||||
|
|
||||||
print '</table>';
|
print '</table>';
|
||||||
@ -255,9 +255,9 @@ if ($action == 'create') {
|
|||||||
print dol_get_fiche_end();
|
print dol_get_fiche_end();
|
||||||
|
|
||||||
print '<div class="center">';
|
print '<div class="center">';
|
||||||
print '<input class="button" type="submit" value="'.$langs->trans("Save").'">';
|
print '<input class="button button-save" type="submit" value="'.$langs->trans("Save").'">';
|
||||||
print ' ';
|
print ' ';
|
||||||
print '<input class="button" type="submit" name="cancel" value="'.$langs->trans("Cancel").'">';
|
print '<input class="button button-cancel" type="submit" name="cancel" value="'.$langs->trans("Cancel").'">';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
|
||||||
print '</form>';
|
print '</form>';
|
||||||
@ -309,7 +309,7 @@ if ($action == 'create') {
|
|||||||
// Chart of accounts type
|
// Chart of accounts type
|
||||||
print '<tr><td>'.$langs->trans("Pcgtype").'</td>';
|
print '<tr><td>'.$langs->trans("Pcgtype").'</td>';
|
||||||
print '<td>';
|
print '<td>';
|
||||||
print '<input type="text" name="pcg_type" value="'.dol_escape_htmltag(isset($_POST['pcg_type']) ?GETPOST('pcg_type', 'alpha') : $object->pcg_type).'">';
|
print '<input type="text" name="pcg_type" value="'.dol_escape_htmltag(GETPOSTISSET('pcg_type') ? GETPOST('pcg_type', 'alpha') : $object->pcg_type).'">';
|
||||||
print '</td></tr>';
|
print '</td></tr>';
|
||||||
|
|
||||||
print '</table>';
|
print '</table>';
|
||||||
@ -317,9 +317,9 @@ if ($action == 'create') {
|
|||||||
print dol_get_fiche_end();
|
print dol_get_fiche_end();
|
||||||
|
|
||||||
print '<div class="center">';
|
print '<div class="center">';
|
||||||
print '<input type="submit" class="button" value="'.$langs->trans("Save").'">';
|
print '<input type="submit" class="button button-save" value="'.$langs->trans("Save").'">';
|
||||||
print ' ';
|
print ' ';
|
||||||
print '<input type="submit" name="cancel" class="button" value="'.$langs->trans("Cancel").'">';
|
print '<input type="submit" name="cancel" class="button button-cancel" value="'.$langs->trans("Cancel").'">';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
|
||||||
print '</form>';
|
print '</form>';
|
||||||
|
|||||||
@ -168,7 +168,7 @@ if (GETPOST('actionadd', 'alpha') || GETPOST('actionmodify', 'alpha'))
|
|||||||
setEventMessages($langs->transnoentities("ErrorFieldRequired", $langs->transnoentities($fieldnamekey)), null, 'errors');
|
setEventMessages($langs->transnoentities("ErrorFieldRequired", $langs->transnoentities($fieldnamekey)), null, 'errors');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (isset($_POST["code"]))
|
if (GETPOSTISSET("code"))
|
||||||
{
|
{
|
||||||
if ($_POST["code"] == '0')
|
if ($_POST["code"] == '0')
|
||||||
{
|
{
|
||||||
@ -705,7 +705,7 @@ if ($id)
|
|||||||
print '<input type="hidden" name="rowid" value="'.$rowid.'">';
|
print '<input type="hidden" name="rowid" value="'.$rowid.'">';
|
||||||
print '<input type="submit" class="button" name="actionmodify" value="'.$langs->trans("Modify").'">';
|
print '<input type="submit" class="button" name="actionmodify" value="'.$langs->trans("Modify").'">';
|
||||||
print '<div name="'.(!empty($obj->rowid) ? $obj->rowid : $obj->code).'"></div>';
|
print '<div name="'.(!empty($obj->rowid) ? $obj->rowid : $obj->code).'"></div>';
|
||||||
print '<input type="submit" class="button" name="actioncancel" value="'.$langs->trans("Cancel").'">';
|
print '<input type="submit" class="button button-cancel" name="actioncancel" value="'.$langs->trans("Cancel").'">';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
print '<td></td>';
|
print '<td></td>';
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -190,9 +190,9 @@ if ($action == 'create')
|
|||||||
print dol_get_fiche_end();
|
print dol_get_fiche_end();
|
||||||
|
|
||||||
print '<div class="center">';
|
print '<div class="center">';
|
||||||
print '<input class="button" type="submit" value="'.$langs->trans("Save").'">';
|
print '<input class="button button-save" type="submit" value="'.$langs->trans("Save").'">';
|
||||||
print ' ';
|
print ' ';
|
||||||
print '<input class="button" type="submit" name="cancel" value="'.$langs->trans("Cancel").'">';
|
print '<input class="button button-cancel" type="submit" name="cancel" value="'.$langs->trans("Cancel").'">';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
|
||||||
print '</form>';
|
print '</form>';
|
||||||
@ -241,9 +241,9 @@ if ($action == 'create')
|
|||||||
print '</table>';
|
print '</table>';
|
||||||
|
|
||||||
print '<br><div class="center">';
|
print '<br><div class="center">';
|
||||||
print '<input type="submit" class="button" value="'.$langs->trans("Save").'">';
|
print '<input type="submit" class="button button-save" value="'.$langs->trans("Save").'">';
|
||||||
print ' ';
|
print ' ';
|
||||||
print '<input type="submit" name="cancel" class="button" value="'.$langs->trans("Cancel").'">';
|
print '<input type="submit" name="cancel" class="button button-cancel" value="'.$langs->trans("Cancel").'">';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
|
||||||
print '</form>';
|
print '</form>';
|
||||||
|
|||||||
@ -582,7 +582,7 @@ if ($id)
|
|||||||
print '<input type="hidden" name="page" value="'.$page.'">';
|
print '<input type="hidden" name="page" value="'.$page.'">';
|
||||||
print '<input type="hidden" name="rowid" value="'.$rowid.'">';
|
print '<input type="hidden" name="rowid" value="'.$rowid.'">';
|
||||||
print '<input type="submit" class="button" name="actionmodify" value="'.$langs->trans("Modify").'">';
|
print '<input type="submit" class="button" name="actionmodify" value="'.$langs->trans("Modify").'">';
|
||||||
print '<input type="submit" class="button" name="actioncancel" value="'.$langs->trans("Cancel").'">';
|
print '<input type="submit" class="button button-cancel" name="actioncancel" value="'.$langs->trans("Cancel").'">';
|
||||||
print '<div name="'.(!empty($obj->rowid) ? $obj->rowid : $obj->code).'"></div>';
|
print '<div name="'.(!empty($obj->rowid) ? $obj->rowid : $obj->code).'"></div>';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -405,7 +405,7 @@ if ($result)
|
|||||||
$varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage;
|
$varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage;
|
||||||
$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields
|
$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields
|
||||||
|
|
||||||
$buttonsave = '<input type="submit" class="button" id="changeaccount" name="changeaccount" value="'.$langs->trans("Save").'">';
|
$buttonsave = '<input type="submit" class="button button-save" id="changeaccount" name="changeaccount" value="'.$langs->trans("Save").'">';
|
||||||
//print '<br><div class="center">'.$buttonsave.'</div>';
|
//print '<br><div class="center">'.$buttonsave.'</div>';
|
||||||
|
|
||||||
$texte = $langs->trans("ListOfProductsServices");
|
$texte = $langs->trans("ListOfProductsServices");
|
||||||
|
|||||||
@ -227,8 +227,8 @@ if ($action != 'export_csv')
|
|||||||
$moreforfilter .= $form->selectDate($search_date_end ? $search_date_end : -1, 'date_end', 0, 0, 1, '', 1, 0);
|
$moreforfilter .= $form->selectDate($search_date_end ? $search_date_end : -1, 'date_end', 0, 0, 1, '', 1, 0);
|
||||||
|
|
||||||
$moreforfilter .= ' - ';
|
$moreforfilter .= ' - ';
|
||||||
$moreforfilter .= $langs->trans('ShowSubtotalByGroup').': ';
|
$moreforfilter .= '<label for="show_subgroup">'.$langs->trans('ShowSubtotalByGroup').'</label>: ';
|
||||||
$moreforfilter .= '<input type="checkbox" name="show_subgroup" value="show_subgroup"'.($show_subgroup == 'show_subgroup' ? ' checked' : '').'>';
|
$moreforfilter .= '<input type="checkbox" name="show_subgroup" id="show_subgroup" value="show_subgroup"'.($show_subgroup == 'show_subgroup' ? ' checked' : '').'>';
|
||||||
|
|
||||||
|
|
||||||
$moreforfilter .= '</div>';
|
$moreforfilter .= '</div>';
|
||||||
@ -272,6 +272,8 @@ if ($action != 'export_csv')
|
|||||||
$total_credit = 0;
|
$total_credit = 0;
|
||||||
$sous_total_debit = 0;
|
$sous_total_debit = 0;
|
||||||
$sous_total_credit = 0;
|
$sous_total_credit = 0;
|
||||||
|
$total_opening_balance = 0;
|
||||||
|
$sous_total_opening_balance = 0;
|
||||||
$displayed_account = "";
|
$displayed_account = "";
|
||||||
|
|
||||||
$accountingaccountstatic = new AccountingAccount($db);
|
$accountingaccountstatic = new AccountingAccount($db);
|
||||||
@ -302,23 +304,28 @@ if ($action != 'export_csv')
|
|||||||
$link = '';
|
$link = '';
|
||||||
$total_debit += $line->debit;
|
$total_debit += $line->debit;
|
||||||
$total_credit += $line->credit;
|
$total_credit += $line->credit;
|
||||||
$root_account_description = $object->get_compte_racine($line->numero_compte);
|
$opening_balance = isset($opening_balances["'".$line->numero_compte."'"]) ? $opening_balances["'".$line->numero_compte."'"] : 0;
|
||||||
|
$total_opening_balance += $opening_balance;
|
||||||
|
|
||||||
|
$tmparrayforrootaccount = $object->getRootAccount($line->numero_compte);
|
||||||
|
$root_account_description = $tmparrayforrootaccount['label'];
|
||||||
|
$root_account_number = $tmparrayforrootaccount['account_number'];
|
||||||
|
|
||||||
if (empty($accountingaccountstatic->account_number)) {
|
if (empty($accountingaccountstatic->account_number)) {
|
||||||
$link = '<a href="'.DOL_URL_ROOT.'/accountancy/admin/card.php?action=create&accountingaccount='.length_accountg($line->numero_compte).'">'.img_edit_add().'</a>';
|
$link = '<a href="'.DOL_URL_ROOT.'/accountancy/admin/card.php?action=create&accountingaccount='.length_accountg($line->numero_compte).'">'.img_edit_add().'</a>';
|
||||||
}
|
}
|
||||||
print '<tr class="oddeven">';
|
|
||||||
|
|
||||||
if (!empty($show_subgroup))
|
if (!empty($show_subgroup))
|
||||||
{
|
{
|
||||||
// Show accounting account
|
// Show accounting account
|
||||||
if (empty($displayed_account) || $root_account_description != $displayed_account) {
|
if (empty($displayed_account) || $root_account_number != $displayed_account) {
|
||||||
// Show subtotal per accounting account
|
// Show subtotal per accounting account
|
||||||
if ($displayed_account != "") {
|
if ($displayed_account != "") {
|
||||||
print '<tr class="liste_total">';
|
print '<tr class="liste_total">';
|
||||||
print '<td class="right" colspan="2">'.$langs->trans("SubTotal").':</td>';
|
print '<td class="right" colspan="2">'.$langs->trans("SubTotal").':</td>';
|
||||||
print '<td class="nowrap right">'.price($sous_total_debit).'</td>';
|
print '<td class="nowrap right">'.price($sous_total_debit).'</td>';
|
||||||
print '<td class="nowrap right">'.price($sous_total_credit).'</td>';
|
print '<td class="nowrap right">'.price($sous_total_credit).'</td>';
|
||||||
print '<td class="nowrap right">'.price(price2num($sous_total_credit - $sous_total_debit)).'</td>';
|
print '<td class="nowrap right">'.price(price2num($sous_total_opening_balance + $sous_total_credit - $sous_total_debit)).'</td>';
|
||||||
print "<td></td>\n";
|
print "<td></td>\n";
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
}
|
}
|
||||||
@ -328,18 +335,19 @@ if ($action != 'export_csv')
|
|||||||
print '<td colspan="6" style="font-weight:bold; border-bottom: 1pt solid black;">'.$line->numero_compte.($root_account_description ? ' - '.$root_account_description : '').'</td>';
|
print '<td colspan="6" style="font-weight:bold; border-bottom: 1pt solid black;">'.$line->numero_compte.($root_account_description ? ' - '.$root_account_description : '').'</td>';
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
|
|
||||||
$displayed_account = $root_account_description;
|
$displayed_account = $root_account_number;
|
||||||
$sous_total_debit = 0;
|
$sous_total_debit = 0;
|
||||||
$sous_total_credit = 0;
|
$sous_total_credit = 0;
|
||||||
|
$sous_total_opening_balance = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// $object->get_compte_racine($line->numero_compte);
|
print '<tr class="oddeven">';
|
||||||
print '<td>'.$accounting_account.'</td>';
|
print '<td>'.$accounting_account.'</td>';
|
||||||
print '<td class="nowraponall right">'.price($opening_balances["'".$line->numero_compte."'"]).'</td>';
|
print '<td class="nowraponall right">'.price($opening_balance).'</td>';
|
||||||
print '<td class="nowraponall right">'.price($line->debit).'</td>';
|
print '<td class="nowraponall right">'.price($line->debit).'</td>';
|
||||||
print '<td class="nowraponall right">'.price($line->credit).'</td>';
|
print '<td class="nowraponall right">'.price($line->credit).'</td>';
|
||||||
print '<td class="nowraponall right">'.price(price2num($line->debit - $line->credit, 'MT')).'</td>';
|
print '<td class="nowraponall right">'.price(price2num($opening_balance + $line->debit - $line->credit, 'MT')).'</td>';
|
||||||
print '<td class="center">'.$link;
|
print '<td class="center">'.$link;
|
||||||
print '</td>';
|
print '</td>';
|
||||||
print "</tr>\n";
|
print "</tr>\n";
|
||||||
@ -347,16 +355,17 @@ if ($action != 'export_csv')
|
|||||||
// Records the sub-total
|
// Records the sub-total
|
||||||
$sous_total_debit += $line->debit;
|
$sous_total_debit += $line->debit;
|
||||||
$sous_total_credit += $line->credit;
|
$sous_total_credit += $line->credit;
|
||||||
|
$sous_total_opening_balance += $opening_balance;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($show_subgroup))
|
if (!empty($show_subgroup))
|
||||||
{
|
{
|
||||||
print '<tr class="liste_total"><td class="right" colspan="2">'.$langs->trans("SubTotal").':</td><td class="nowrap right">'.price($sous_total_debit).'</td><td class="nowrap right">'.price($sous_total_credit).'</td><td class="nowrap right">'.price(price2num($sous_total_debit - $sous_total_credit)).'</td>';
|
print '<tr class="liste_total"><td class="right" colspan="2">'.$langs->trans("SubTotal").':</td><td class="nowrap right">'.price($sous_total_debit).'</td><td class="nowrap right">'.price($sous_total_credit).'</td><td class="nowrap right">'.price(price2num($sous_total_opening_balance + $sous_total_debit - $sous_total_credit, 'MT')).'</td>';
|
||||||
print "<td></td>\n";
|
print "<td></td>\n";
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
}
|
}
|
||||||
|
|
||||||
print '<tr class="liste_total"><td class="right" colspan="2">'.$langs->trans("AccountBalance").':</td><td class="nowrap right">'.price($total_debit).'</td><td class="nowrap right">'.price($total_credit).'</td><td class="nowrap right">'.price(price2num($total_debit - $total_credit)).'</td>';
|
print '<tr class="liste_total"><td class="right" colspan="2">'.$langs->trans("AccountBalance").':</td><td class="nowrap right">'.price($total_debit).'</td><td class="nowrap right">'.price($total_credit).'</td><td class="nowrap right">'.price(price2num($total_opening_balance + $total_debit - $total_credit, 'MT')).'</td>';
|
||||||
print "<td></td>\n";
|
print "<td></td>\n";
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
|
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
* 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-2018 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
* Copyright (C) 2013-2018 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 Frédéric France <frederic.france@netlogic.fr>
|
* Copyright (C) 2018-2020 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
|
||||||
* 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
|
||||||
@ -128,8 +128,7 @@ if ($action == "confirm_update") {
|
|||||||
if ($result < 0) {
|
if ($result < 0) {
|
||||||
setEventMessages($object->error, $object->errors, 'errors');
|
setEventMessages($object->error, $object->errors, 'errors');
|
||||||
} else {
|
} else {
|
||||||
if ($mode != '_tmp')
|
if ($mode != '_tmp') {
|
||||||
{
|
|
||||||
setEventMessages($langs->trans('RecordSaved'), null, 'mesgs');
|
setEventMessages($langs->trans('RecordSaved'), null, 'mesgs');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -165,14 +164,14 @@ if ($action == "confirm_update") {
|
|||||||
$object->label_operation = $label_operation;
|
$object->label_operation = $label_operation;
|
||||||
$object->debit = $debit;
|
$object->debit = $debit;
|
||||||
$object->credit = $credit;
|
$object->credit = $credit;
|
||||||
$object->doc_date = GETPOST('doc_date', 'alpha');
|
$object->doc_date = (string) GETPOST('doc_date', 'alpha');
|
||||||
$object->doc_type = GETPOST('doc_type', 'alpha');
|
$object->doc_type = (string) GETPOST('doc_type', 'alpha');
|
||||||
$object->piece_num = $piece_num;
|
$object->piece_num = $piece_num;
|
||||||
$object->doc_ref = GETPOST('doc_ref', 'alpha');
|
$object->doc_ref = (string) GETPOST('doc_ref', 'alpha');
|
||||||
$object->code_journal = $journal_code;
|
$object->code_journal = $journal_code;
|
||||||
$object->journal_label = $journal_label;
|
$object->journal_label = $journal_label;
|
||||||
$object->fk_doc = (int) GETPOST('fk_doc', 'int');
|
$object->fk_doc = GETPOSTINT('fk_doc');
|
||||||
$object->fk_docdet = (int) GETPOST('fk_docdet', 'int');
|
$object->fk_docdet = GETPOSTINT('fk_docdet');
|
||||||
|
|
||||||
if (floatval($debit) != 0.0) {
|
if (floatval($debit) != 0.0) {
|
||||||
$object->montant = $debit; // deprecated
|
$object->montant = $debit; // deprecated
|
||||||
@ -190,8 +189,7 @@ if ($action == "confirm_update") {
|
|||||||
if ($result < 0) {
|
if ($result < 0) {
|
||||||
setEventMessages($object->error, $object->errors, 'errors');
|
setEventMessages($object->error, $object->errors, 'errors');
|
||||||
} else {
|
} else {
|
||||||
if ($mode != '_tmp')
|
if ($mode != '_tmp') {
|
||||||
{
|
|
||||||
setEventMessages($langs->trans('RecordSaved'), null, 'mesgs');
|
setEventMessages($langs->trans('RecordSaved'), null, 'mesgs');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -391,7 +389,7 @@ if ($action == 'create')
|
|||||||
print '<div class="center">';
|
print '<div class="center">';
|
||||||
print '<input type="submit" class="button" value="'.$langs->trans("Create").'">';
|
print '<input type="submit" class="button" value="'.$langs->trans("Create").'">';
|
||||||
print ' ';
|
print ' ';
|
||||||
print '<input type="button" value="'.$langs->trans("Cancel").'" class="button" onclick="history.go(-1)" />';
|
print '<input type="button" value="'.$langs->trans("Cancel").'" class="button button-cancel" onclick="history.go(-1)" />';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
|
||||||
print '</form>';
|
print '</form>';
|
||||||
@ -707,7 +705,7 @@ if ($action == 'create')
|
|||||||
}
|
}
|
||||||
|
|
||||||
print ' ';
|
print ' ';
|
||||||
print '<a class="button" href="'.DOL_URL_ROOT.'/accountancy/bookkeeping/list.php">'.$langs->trans("Cancel").'</a>';
|
print '<a class="button button-cancel" href="'.DOL_URL_ROOT.'/accountancy/bookkeeping/list.php">'.$langs->trans("Cancel").'</a>';
|
||||||
|
|
||||||
print "</div>";
|
print "</div>";
|
||||||
}
|
}
|
||||||
|
|||||||
@ -108,7 +108,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') && !isset($_POST['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->rights->accounting->mouvements->export)
|
||||||
{
|
{
|
||||||
if (empty($search_date_start) && empty($search_date_end) && !GETPOSTISSET('restore_lastsearch_values'))
|
if (empty($search_date_start) && empty($search_date_end) && !GETPOSTISSET('restore_lastsearch_values'))
|
||||||
{
|
{
|
||||||
@ -627,22 +627,27 @@ print '<input type="hidden" name="sortorder" value="'.urlencode($sortorder).'">'
|
|||||||
if (count($filter)) $buttonLabel = $langs->trans("ExportFilteredList");
|
if (count($filter)) $buttonLabel = $langs->trans("ExportFilteredList");
|
||||||
else $buttonLabel = $langs->trans("ExportList");
|
else $buttonLabel = $langs->trans("ExportList");
|
||||||
|
|
||||||
// Button re-export
|
$parameters = array();
|
||||||
if (!empty($conf->global->ACCOUNTING_REEXPORT)) {
|
$reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||||
$newcardbutton = '<a class="valignmiddle" href="'.$_SERVER['PHP_SELF'].'?action=setreexport&token='.newToken().'&value=0'.($param ? '&'.$param : '').'">'.img_picto($langs->trans("Activated"), 'switch_on').'</a> ';
|
if (empty($reshook)) {
|
||||||
} else {
|
// Button re-export
|
||||||
$newcardbutton = '<a class="valignmiddle" href="'.$_SERVER['PHP_SELF'].'?action=setreexport&token='.newToken().'&value=1'.($param ? '&'.$param : '').'">'.img_picto($langs->trans("Disabled"), 'switch_off').'</a> ';
|
if (!empty($conf->global->ACCOUNTING_REEXPORT)) {
|
||||||
|
$newcardbutton = '<a class="valignmiddle" href="'.$_SERVER['PHP_SELF'].'?action=setreexport&token='.newToken().'&value=0'.($param ? '&'.$param : '').'">'.img_picto($langs->trans("Activated"), 'switch_on').'</a> ';
|
||||||
|
} else {
|
||||||
|
$newcardbutton = '<a class="valignmiddle" href="'.$_SERVER['PHP_SELF'].'?action=setreexport&token='.newToken().'&value=1'.($param ? '&'.$param : '').'">'.img_picto($langs->trans("Disabled"), 'switch_off').'</a> ';
|
||||||
|
}
|
||||||
|
$newcardbutton .= '<span class="valignmiddle marginrightonly">'.$langs->trans("IncludeDocsAlreadyExported").'</span>';
|
||||||
|
|
||||||
|
$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($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('GroupByAccountAccounting'), '', 'fa fa-stream paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/listbyaccount.php?'.$param, '', 1, array('morecss' => 'marginleftonly'));
|
||||||
|
$newcardbutton .= dolGetButtonTitle($langs->trans('GroupBySubAccountAccounting'), '', 'fa fa-align-left vmirror paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/listbysubaccount.php', '', 1, array('morecss' => 'marginleftonly'));
|
||||||
|
|
||||||
|
$url = './card.php?action=create';
|
||||||
|
if (!empty($socid)) $url .= '&socid='.$socid;
|
||||||
|
$newcardbutton .= dolGetButtonTitle($langs->trans('NewAccountingMvt'), '', 'fa fa-plus-circle paddingleft', $url, '', $user->rights->accounting->mouvements->creer);
|
||||||
}
|
}
|
||||||
$newcardbutton .= '<span class="valignmiddle marginrightonly">'.$langs->trans("IncludeDocsAlreadyExported").'</span>';
|
|
||||||
|
|
||||||
$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($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('GroupByAccountAccounting'), '', 'fa fa-stream paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/listbyaccount.php?'.$param, '', 1, array('morecss'=>'marginleftonly'));
|
|
||||||
|
|
||||||
$url = './card.php?action=create';
|
|
||||||
if (!empty($socid)) $url .= '&socid='.$socid;
|
|
||||||
$newcardbutton .= dolGetButtonTitle($langs->trans('NewAccountingMvt'), '', 'fa fa-plus-circle paddingleft', $url, '', $user->rights->accounting->mouvements->creer);
|
|
||||||
|
|
||||||
print_barre_liste($title_page, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords, 'title_accountancy', 0, $newcardbutton, '', $limit, 0, 0, 1);
|
print_barre_liste($title_page, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords, 'title_accountancy', 0, $newcardbutton, '', $limit, 0, 0, 1);
|
||||||
|
|
||||||
@ -932,6 +937,11 @@ while ($i < min($num, $limit))
|
|||||||
$filedir = $conf->expensereport->dir_output.'/'.dol_sanitizeFileName($line->doc_ref);
|
$filedir = $conf->expensereport->dir_output.'/'.dol_sanitizeFileName($line->doc_ref);
|
||||||
$urlsource = $_SERVER['PHP_SELF'].'?id='.$objectstatic->id;
|
$urlsource = $_SERVER['PHP_SELF'].'?id='.$objectstatic->id;
|
||||||
$documentlink = $formfile->getDocumentsLink($objectstatic->element, $filename, $filedir);
|
$documentlink = $formfile->getDocumentsLink($objectstatic->element, $filename, $filedir);
|
||||||
|
} elseif ($line->doc_type == 'bank')
|
||||||
|
{
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
|
||||||
|
$objectstatic = new AccountLine($db);
|
||||||
|
$objectstatic->fetch($line->fk_doc);
|
||||||
} else {
|
} else {
|
||||||
// Other type
|
// Other type
|
||||||
}
|
}
|
||||||
@ -946,6 +956,10 @@ while ($i < min($num, $limit))
|
|||||||
{
|
{
|
||||||
print $objectstatic->getNomUrl(1, '', 0, 0, '', 0, -1, 1);
|
print $objectstatic->getNomUrl(1, '', 0, 0, '', 0, -1, 1);
|
||||||
print $documentlink;
|
print $documentlink;
|
||||||
|
} elseif ($line->doc_type == 'bank') {
|
||||||
|
print $objectstatic->getNomUrl(1);
|
||||||
|
$bank_ref = strstr($line->doc_ref, '-');
|
||||||
|
print " " . $bank_ref;
|
||||||
} else {
|
} else {
|
||||||
print $line->doc_ref;
|
print $line->doc_ref;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -39,8 +39,14 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
|||||||
$langs->loadLangs(array("accountancy", "compta"));
|
$langs->loadLangs(array("accountancy", "compta"));
|
||||||
|
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$search_date_start = dol_mktime(0, 0, 0, GETPOST('search_date_startmonth', 'int'), GETPOST('search_date_startday', 'int'), GETPOST('search_date_startyear', 'int'));
|
$search_date_startyear = GETPOST('search_date_startyear', 'int');
|
||||||
$search_date_end = dol_mktime(0, 0, 0, GETPOST('search_date_endmonth', 'int'), GETPOST('search_date_endday', 'int'), GETPOST('search_date_endyear', 'int'));
|
$search_date_startmonth = GETPOST('search_date_startmonth', 'int');
|
||||||
|
$search_date_startday = GETPOST('search_date_startday', 'int');
|
||||||
|
$search_date_endyear = GETPOST('search_date_endyear', 'int');
|
||||||
|
$search_date_endmonth = GETPOST('search_date_endmonth', 'int');
|
||||||
|
$search_date_endday = GETPOST('search_date_endday', 'int');
|
||||||
|
$search_date_start = dol_mktime(0, 0, 0, $search_date_startmonth, $search_date_startday, $search_date_startyear);
|
||||||
|
$search_date_end = dol_mktime(0, 0, 0, $search_date_endmonth, $search_date_endday, $search_date_endyear);
|
||||||
$search_doc_date = dol_mktime(0, 0, 0, GETPOST('doc_datemonth', 'int'), GETPOST('doc_dateday', 'int'), GETPOST('doc_dateyear', 'int'));
|
$search_doc_date = dol_mktime(0, 0, 0, GETPOST('doc_datemonth', 'int'), GETPOST('doc_dateday', 'int'), GETPOST('doc_dateyear', 'int'));
|
||||||
|
|
||||||
$search_accountancy_code = GETPOST("search_accountancy_code");
|
$search_accountancy_code = GETPOST("search_accountancy_code");
|
||||||
@ -126,9 +132,24 @@ $arrayfields = array(
|
|||||||
|
|
||||||
if (empty($conf->global->ACCOUNTING_ENABLE_LETTERING)) unset($arrayfields['t.lettering_code']);
|
if (empty($conf->global->ACCOUNTING_ENABLE_LETTERING)) unset($arrayfields['t.lettering_code']);
|
||||||
|
|
||||||
|
if ($search_date_start && empty($search_date_startyear)) {
|
||||||
|
$tmparray = dol_getdate($search_date_start);
|
||||||
|
$search_date_startyear = $tmparray['year'];
|
||||||
|
$search_date_startmonth = $tmparray['mon'];
|
||||||
|
$search_date_startday = $tmparray['mday'];
|
||||||
|
}
|
||||||
|
if ($search_date_end && empty($search_date_endyear)) {
|
||||||
|
$tmparray = dol_getdate($search_date_end);
|
||||||
|
$search_date_endyear = $tmparray['year'];
|
||||||
|
$search_date_endmonth = $tmparray['mon'];
|
||||||
|
$search_date_endday = $tmparray['mday'];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Action
|
* Action
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (GETPOST('cancel', 'alpha')) { $action = 'list'; $massaction = ''; }
|
if (GETPOST('cancel', 'alpha')) { $action = 'list'; $massaction = ''; }
|
||||||
if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massaction != 'confirm_presend') { $massaction = ''; }
|
if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massaction != 'confirm_presend') { $massaction = ''; }
|
||||||
|
|
||||||
@ -172,11 +193,11 @@ if (empty($reshook))
|
|||||||
|
|
||||||
if (!empty($search_date_start)) {
|
if (!empty($search_date_start)) {
|
||||||
$filter['t.doc_date>='] = $search_date_start;
|
$filter['t.doc_date>='] = $search_date_start;
|
||||||
$param .= '&search_date_startmonth='.GETPOST('search_date_startmonth', 'int').'&search_date_startday='.GETPOST('search_date_startday', 'int').'&search_date_startyear='.GETPOST('search_date_startyear', 'int');
|
$param .= '&search_date_startmonth='.$search_date_startmonth.'&search_date_startday='.$search_date_startday.'&search_date_startyear='.$search_date_startyear;
|
||||||
}
|
}
|
||||||
if (!empty($search_date_end)) {
|
if (!empty($search_date_end)) {
|
||||||
$filter['t.doc_date<='] = $search_date_end;
|
$filter['t.doc_date<='] = $search_date_end;
|
||||||
$param .= '&search_date_endmonth='.GETPOST('search_date_endmonth', 'int').'&search_date_endday='.GETPOST('search_date_endday', 'int').'&search_date_endyear='.GETPOST('search_date_endyear', 'int');
|
$param .= '&search_date_endmonth='.$search_date_endmonth.'&search_date_endday='.$search_date_endday.'&search_date_endyear='.$search_date_endyear;
|
||||||
}
|
}
|
||||||
if (!empty($search_doc_date)) {
|
if (!empty($search_doc_date)) {
|
||||||
$filter['t.doc_date'] = $search_doc_date;
|
$filter['t.doc_date'] = $search_doc_date;
|
||||||
@ -242,7 +263,7 @@ if ($action == 'delbookkeeping' && $user->rights->accounting->mouvements->suppri
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Make a redirect to avoid to launch the delete later after a back button
|
// Make a redirect to avoid to launch the delete later after a back button
|
||||||
header("Location: listbyaccount.php".($param ? '?'.$param : ''));
|
header("Location: ".$_SERVER["PHP_SELF"].($param ? '?'.$param : ''));
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -267,7 +288,7 @@ if ($action == 'delbookkeepingyearconfirm' && $user->rights->accounting->mouveme
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Make a redirect to avoid to launch the delete later after a back button
|
// Make a redirect to avoid to launch the delete later after a back button
|
||||||
header("Location: listbyaccount.php".($param ? '?'.$param : ''));
|
header("Location: ".$_SERVER["PHP_SELF"].($param ? '?'.$param : ''));
|
||||||
exit;
|
exit;
|
||||||
} else {
|
} else {
|
||||||
setEventMessages("NoRecordDeleted", null, 'warnings');
|
setEventMessages("NoRecordDeleted", null, 'warnings');
|
||||||
@ -284,7 +305,7 @@ if ($action == 'delmouvconfirm' && $user->rights->accounting->mouvements->suppri
|
|||||||
setEventMessages($langs->trans("RecordDeleted"), null, 'mesgs');
|
setEventMessages($langs->trans("RecordDeleted"), null, 'mesgs');
|
||||||
}
|
}
|
||||||
|
|
||||||
header("Location: listbyaccount.php?noreset=1".($param ? '&'.$param : ''));
|
header("Location: ".$_SERVER["PHP_SELF"]."?noreset=1".($param ? '&'.$param : ''));
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -303,7 +324,6 @@ $title_page = $langs->trans("Operations").' - '.$langs->trans("VueByAccountAccou
|
|||||||
|
|
||||||
llxHeader('', $title_page);
|
llxHeader('', $title_page);
|
||||||
|
|
||||||
|
|
||||||
// List
|
// List
|
||||||
$nbtotalofrecords = '';
|
$nbtotalofrecords = '';
|
||||||
if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) {
|
if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) {
|
||||||
@ -376,12 +396,14 @@ print '<input type="hidden" name="formfilteraction" id="formfilteraction" value=
|
|||||||
print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
|
print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
|
||||||
print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
|
print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
|
||||||
|
|
||||||
$newcardbutton .= dolGetButtonTitle($langs->trans('ViewFlatList'), '', 'fa fa-list paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/list.php?'.$param);
|
$parameters = array();
|
||||||
$newcardbutton .= dolGetButtonTitle($langs->trans('VueByAccountAccounting'), '', 'fa fa-stream paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/listbyaccount.php?'.$param, '', 1, array('morecss'=>'marginleftonly btnTitleSelected'));
|
$reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||||
|
if (empty($reshook)) {
|
||||||
$newcardbutton .= ' ';
|
$newcardbutton = dolGetButtonTitle($langs->trans('ViewFlatList'), '', 'fa fa-list paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/list.php?'.$param);
|
||||||
|
$newcardbutton .= dolGetButtonTitle($langs->trans('GroupByAccountAccounting'), '', 'fa fa-stream paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/listbyaccount.php?'.$param, '', 1, array('morecss' => 'marginleftonly btnTitleSelected'));
|
||||||
$newcardbutton .= dolGetButtonTitle($langs->trans('NewAccountingMvt'), '', 'fa fa-plus-circle paddingleft', DOL_URL_ROOT.'/accountancy/bookkeeping/card.php?action=create');
|
$newcardbutton .= dolGetButtonTitle($langs->trans('GroupBySubAccountAccounting'), '', 'fa fa-align-left vmirror paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/listbysubaccount.php', '', 1, array('morecss' => 'marginleftonly'));
|
||||||
|
$newcardbutton .= dolGetButtonTitle($langs->trans('NewAccountingMvt'), '', 'fa fa-plus-circle paddingleft', DOL_URL_ROOT.'/accountancy/bookkeeping/card.php?action=create');
|
||||||
|
}
|
||||||
|
|
||||||
if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param .= '&contextpage='.urlencode($contextpage);
|
if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param .= '&contextpage='.urlencode($contextpage);
|
||||||
if ($limit > 0 && $limit != $conf->liste_limit) $param .= '&limit='.urlencode($limit);
|
if ($limit > 0 && $limit != $conf->liste_limit) $param .= '&limit='.urlencode($limit);
|
||||||
@ -520,8 +542,15 @@ while ($i < min($num, $limit))
|
|||||||
|
|
||||||
// Is it a break ?
|
// Is it a break ?
|
||||||
if ($accountg != $displayed_account_number || !isset($displayed_account_number)) {
|
if ($accountg != $displayed_account_number || !isset($displayed_account_number)) {
|
||||||
$colspan = $totalarray['nbfield'] - 3;
|
if (empty($conf->global->ACCOUNTING_ENABLE_LETTERING) || empty($arrayfields['t.lettering_code']['checked'])) {
|
||||||
$colspanend = $totalarray['nbfield'] - 7;
|
$colnumber = 3;
|
||||||
|
$colnumberend = 7;
|
||||||
|
} else {
|
||||||
|
$colnumber = 4;
|
||||||
|
$colnumberend = 7;
|
||||||
|
}
|
||||||
|
$colspan = $totalarray['nbfield'] - $colnumber;
|
||||||
|
$colspanend = $totalarray['nbfield'] - $colnumberend;
|
||||||
// Show a subtotal by accounting account
|
// Show a subtotal by accounting account
|
||||||
if (isset($displayed_account_number)) {
|
if (isset($displayed_account_number)) {
|
||||||
print '<tr class="liste_total">';
|
print '<tr class="liste_total">';
|
||||||
@ -638,20 +667,29 @@ while ($i < min($num, $limit))
|
|||||||
$filedir = $conf->expensereport->dir_output.'/'.dol_sanitizeFileName($line->doc_ref);
|
$filedir = $conf->expensereport->dir_output.'/'.dol_sanitizeFileName($line->doc_ref);
|
||||||
$urlsource = $_SERVER['PHP_SELF'].'?id='.$objectstatic->id;
|
$urlsource = $_SERVER['PHP_SELF'].'?id='.$objectstatic->id;
|
||||||
$documentlink = $formfile->getDocumentsLink($objectstatic->element, $filename, $filedir);
|
$documentlink = $formfile->getDocumentsLink($objectstatic->element, $filename, $filedir);
|
||||||
|
} elseif ($line->doc_type == 'bank')
|
||||||
|
{
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
|
||||||
|
$objectstatic = new AccountLine($db);
|
||||||
|
$objectstatic->fetch($line->fk_doc);
|
||||||
} else {
|
} else {
|
||||||
// Other type
|
// Other type
|
||||||
}
|
}
|
||||||
|
|
||||||
print '<td class="nowrap">';
|
print '<td class="maxwidth400">';
|
||||||
|
|
||||||
print '<table class="nobordernopadding"><tr class="nocellnopadd">';
|
print '<table class="nobordernopadding"><tr class="nocellnopadd">';
|
||||||
// Picto + Ref
|
// Picto + Ref
|
||||||
print '<td class="nobordernopadding nowrap">';
|
print '<td class="nobordernopadding">';
|
||||||
|
|
||||||
if ($line->doc_type == 'customer_invoice' || $line->doc_type == 'supplier_invoice' || $line->doc_type == 'expense_report')
|
if ($line->doc_type == 'customer_invoice' || $line->doc_type == 'supplier_invoice' || $line->doc_type == 'expense_report')
|
||||||
{
|
{
|
||||||
print $objectstatic->getNomUrl(1, '', 0, 0, '', 0, -1, 1);
|
print $objectstatic->getNomUrl(1, '', 0, 0, '', 0, -1, 1);
|
||||||
print $documentlink;
|
print $documentlink;
|
||||||
|
} elseif ($line->doc_type == 'bank') {
|
||||||
|
print $objectstatic->getNomUrl(1);
|
||||||
|
$bank_ref = strstr($line->doc_ref, '-');
|
||||||
|
print " " . $bank_ref;
|
||||||
} else {
|
} else {
|
||||||
print $line->doc_ref;
|
print $line->doc_ref;
|
||||||
}
|
}
|
||||||
@ -721,8 +759,15 @@ while ($i < min($num, $limit))
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Show sub-total of last shown account
|
// Show sub-total of last shown account
|
||||||
$colspan = $totalarray['nbfield'] - 3;
|
if (empty($conf->global->ACCOUNTING_ENABLE_LETTERING) || empty($arrayfields['t.lettering_code']['checked'])) {
|
||||||
$colspanend = $totalarray['nbfield'] - 8;
|
$colnumber = 3;
|
||||||
|
$colnumberend = 7;
|
||||||
|
} else {
|
||||||
|
$colnumber = 4;
|
||||||
|
$colnumberend = 7;
|
||||||
|
}
|
||||||
|
$colspan = $totalarray['nbfield'] - $colnumber;
|
||||||
|
$colspanend = $totalarray['nbfield'] - $colnumberend;
|
||||||
print '<tr class="liste_total">';
|
print '<tr class="liste_total">';
|
||||||
print '<td class="right" colspan="'.$colspan.'">'.$langs->trans("TotalForAccount").' '.$accountg.':</td>';
|
print '<td class="right" colspan="'.$colspan.'">'.$langs->trans("TotalForAccount").' '.$accountg.':</td>';
|
||||||
print '<td class="nowrap right">'.price($sous_total_debit).'</td>';
|
print '<td class="nowrap right">'.price($sous_total_debit).'</td>';
|
||||||
|
|||||||
@ -39,8 +39,14 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
|||||||
$langs->loadLangs(array("accountancy", "compta"));
|
$langs->loadLangs(array("accountancy", "compta"));
|
||||||
|
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$search_date_start = dol_mktime(0, 0, 0, GETPOST('search_date_startmonth', 'int'), GETPOST('search_date_startday', 'int'), GETPOST('search_date_startyear', 'int'));
|
$search_date_startyear = GETPOST('search_date_startyear', 'int');
|
||||||
$search_date_end = dol_mktime(0, 0, 0, GETPOST('search_date_endmonth', 'int'), GETPOST('search_date_endday', 'int'), GETPOST('search_date_endyear', 'int'));
|
$search_date_startmonth = GETPOST('search_date_startmonth', 'int');
|
||||||
|
$search_date_startday = GETPOST('search_date_startday', 'int');
|
||||||
|
$search_date_endyear = GETPOST('search_date_endyear', 'int');
|
||||||
|
$search_date_endmonth = GETPOST('search_date_endmonth', 'int');
|
||||||
|
$search_date_endday = GETPOST('search_date_endday', 'int');
|
||||||
|
$search_date_start = dol_mktime(0, 0, 0, $search_date_startmonth, $search_date_startday, $search_date_startyear);
|
||||||
|
$search_date_end = dol_mktime(0, 0, 0, $search_date_endmonth, $search_date_endday, $search_date_endyear);
|
||||||
$search_doc_date = dol_mktime(0, 0, 0, GETPOST('doc_datemonth', 'int'), GETPOST('doc_dateday', 'int'), GETPOST('doc_dateyear', 'int'));
|
$search_doc_date = dol_mktime(0, 0, 0, GETPOST('doc_datemonth', 'int'), GETPOST('doc_dateday', 'int'), GETPOST('doc_dateyear', 'int'));
|
||||||
|
|
||||||
$search_accountancy_code = GETPOST("search_accountancy_code");
|
$search_accountancy_code = GETPOST("search_accountancy_code");
|
||||||
@ -126,6 +132,20 @@ $arrayfields = array(
|
|||||||
|
|
||||||
if (empty($conf->global->ACCOUNTING_ENABLE_LETTERING)) unset($arrayfields['t.lettering_code']);
|
if (empty($conf->global->ACCOUNTING_ENABLE_LETTERING)) unset($arrayfields['t.lettering_code']);
|
||||||
|
|
||||||
|
if ($search_date_start && empty($search_date_startyear)) {
|
||||||
|
$tmparray = dol_getdate($search_date_start);
|
||||||
|
$search_date_startyear = $tmparray['year'];
|
||||||
|
$search_date_startmonth = $tmparray['mon'];
|
||||||
|
$search_date_startday = $tmparray['mday'];
|
||||||
|
}
|
||||||
|
if ($search_date_end && empty($search_date_endyear)) {
|
||||||
|
$tmparray = dol_getdate($search_date_end);
|
||||||
|
$search_date_endyear = $tmparray['year'];
|
||||||
|
$search_date_endmonth = $tmparray['mon'];
|
||||||
|
$search_date_endday = $tmparray['mday'];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Action
|
* Action
|
||||||
*/
|
*/
|
||||||
@ -172,11 +192,11 @@ if (empty($reshook))
|
|||||||
|
|
||||||
if (!empty($search_date_start)) {
|
if (!empty($search_date_start)) {
|
||||||
$filter['t.doc_date>='] = $search_date_start;
|
$filter['t.doc_date>='] = $search_date_start;
|
||||||
$param .= '&search_date_startmonth='.GETPOST('search_date_startmonth', 'int').'&search_date_startday='.GETPOST('search_date_startday', 'int').'&search_date_startyear='.GETPOST('search_date_startyear', 'int');
|
$param .= '&search_date_startmonth='.$search_date_startmonth.'&search_date_startday='.$search_date_startday.'&search_date_startyear='.$search_date_startyear;
|
||||||
}
|
}
|
||||||
if (!empty($search_date_end)) {
|
if (!empty($search_date_end)) {
|
||||||
$filter['t.doc_date<='] = $search_date_end;
|
$filter['t.doc_date<='] = $search_date_end;
|
||||||
$param .= '&search_date_endmonth='.GETPOST('search_date_endmonth', 'int').'&search_date_endday='.GETPOST('search_date_endday', 'int').'&search_date_endyear='.GETPOST('search_date_endyear', 'int');
|
$param .= '&search_date_endmonth='.$search_date_endmonth.'&search_date_endday='.$search_date_endday.'&search_date_endyear='.$search_date_endyear;
|
||||||
}
|
}
|
||||||
if (!empty($search_doc_date)) {
|
if (!empty($search_doc_date)) {
|
||||||
$filter['t.doc_date'] = $search_doc_date;
|
$filter['t.doc_date'] = $search_doc_date;
|
||||||
@ -242,7 +262,7 @@ if ($action == 'delbookkeeping' && $user->rights->accounting->mouvements->suppri
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Make a redirect to avoid to launch the delete later after a back button
|
// Make a redirect to avoid to launch the delete later after a back button
|
||||||
header("Location: listbyaccount.php".($param ? '?'.$param : ''));
|
header("Location: ".$_SERVER["PHP_SELF"].($param ? '?'.$param : ''));
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -377,13 +397,22 @@ print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
|
|||||||
print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
|
print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
|
||||||
|
|
||||||
|
|
||||||
$newcardbutton = dolGetButtonTitle($langs->trans('ViewAccountList'), '', 'fa fa-stream paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/listbyaccount.php', '', 1, array('morecss'=>'marginleftonly btnTitleSelected'));
|
$parameters = array();
|
||||||
$newcardbutton .= dolGetButtonTitle($langs->trans('NewAccountingMvt'), '', 'fa fa-plus-circle paddingleft', DOL_URL_ROOT.'/accountancy/bookkeeping/card.php?action=create');
|
$reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||||
|
if (empty($reshook)) {
|
||||||
|
$newcardbutton = dolGetButtonTitle($langs->trans('ViewFlatList'), '', 'fa fa-list paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/list.php?'.$param);
|
||||||
|
$newcardbutton .= dolGetButtonTitle($langs->trans('GroupByAccountAccounting'), '', 'fa fa-stream paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/listbyaccount.php', '', 1, array('morecss' => 'marginleftonly'));
|
||||||
|
$newcardbutton .= dolGetButtonTitle($langs->trans('GroupBySubAccountAccounting'), '', 'fa fa-align-left vmirror paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/listbysubaccount.php', '', 1, array('morecss' => 'marginleftonly btnTitleSelected'));
|
||||||
|
|
||||||
|
$newcardbutton .= dolGetButtonTitle($langs->trans('NewAccountingMvt'), '', 'fa fa-plus-circle paddingleft', DOL_URL_ROOT.'/accountancy/bookkeeping/card.php?action=create');
|
||||||
|
}
|
||||||
|
|
||||||
if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param .= '&contextpage='.urlencode($contextpage);
|
if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param .= '&contextpage='.urlencode($contextpage);
|
||||||
if ($limit > 0 && $limit != $conf->liste_limit) $param .= '&limit='.urlencode($limit);
|
if ($limit > 0 && $limit != $conf->liste_limit) $param .= '&limit='.urlencode($limit);
|
||||||
|
|
||||||
print_barre_liste($title_page, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $result, $nbtotalofrecords, 'title_accountancy', 0, $newcardbutton, '', $limit);
|
print_barre_liste($title_page, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $result, $nbtotalofrecords, 'title_accountancy', 0, $newcardbutton, '', $limit, 0, 0, 1);
|
||||||
|
|
||||||
|
print info_admin($langs->trans("WarningRecordWithoutSubledgerAreExcluded"));
|
||||||
|
|
||||||
$varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage;
|
$varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage;
|
||||||
$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields
|
$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields
|
||||||
@ -517,8 +546,15 @@ while ($i < min($num, $limit))
|
|||||||
|
|
||||||
// Is it a break ?
|
// Is it a break ?
|
||||||
if ($accountg != $displayed_account_number || !isset($displayed_account_number)) {
|
if ($accountg != $displayed_account_number || !isset($displayed_account_number)) {
|
||||||
$colspan = $totalarray['nbfield'] - 3;
|
if (empty($conf->global->ACCOUNTING_ENABLE_LETTERING) || empty($arrayfields['t.lettering_code']['checked'])) {
|
||||||
$colspanend = $totalarray['nbfield'] - 7;
|
$colnumber = 3;
|
||||||
|
$colnumberend = 7;
|
||||||
|
} else {
|
||||||
|
$colnumber = 4;
|
||||||
|
$colnumberend = 7;
|
||||||
|
}
|
||||||
|
$colspan = $totalarray['nbfield'] - $colnumber;
|
||||||
|
$colspanend = $totalarray['nbfield'] - $colnumberend;
|
||||||
// Show a subtotal by accounting account
|
// Show a subtotal by accounting account
|
||||||
if (isset($displayed_account_number)) {
|
if (isset($displayed_account_number)) {
|
||||||
print '<tr class="liste_total">';
|
print '<tr class="liste_total">';
|
||||||
@ -550,8 +586,16 @@ while ($i < min($num, $limit))
|
|||||||
// Show the break account
|
// Show the break account
|
||||||
print "<tr>";
|
print "<tr>";
|
||||||
print '<td colspan="'.($totalarray['nbfield'] ? $totalarray['nbfield'] : 9).'" style="font-weight:bold; border-bottom: 1pt solid black;">';
|
print '<td colspan="'.($totalarray['nbfield'] ? $totalarray['nbfield'] : 9).'" style="font-weight:bold; border-bottom: 1pt solid black;">';
|
||||||
if ($line->subledger_account != "" && $line->subledger_account != '-1') print length_accounta($line->subledger_account).' : '.$object->get_compte_desc($line->numero_compte);
|
if ($line->subledger_account != "" && $line->subledger_account != '-1') {
|
||||||
else print '<span class="error">'.$langs->trans("Unknown").'</span>';
|
print $object->get_compte_desc($line->numero_compte).' : '.length_accounta($line->subledger_account);
|
||||||
|
} else {
|
||||||
|
// Should not happen: subledger account must be null or a non empty value
|
||||||
|
print '<span class="error">'.$langs->trans("Unknown");
|
||||||
|
if ($line->subledger_label) print ' ('.$line->subledger_label.')';
|
||||||
|
$htmltext = 'EmptyStringForSubledgerAccountButSubledgerLabelDefined';
|
||||||
|
print $form->textwithpicto('', $htmltext);
|
||||||
|
print '</span>';
|
||||||
|
}
|
||||||
print '</td>';
|
print '</td>';
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
|
|
||||||
@ -635,20 +679,29 @@ while ($i < min($num, $limit))
|
|||||||
$filedir = $conf->expensereport->dir_output.'/'.dol_sanitizeFileName($line->doc_ref);
|
$filedir = $conf->expensereport->dir_output.'/'.dol_sanitizeFileName($line->doc_ref);
|
||||||
$urlsource = $_SERVER['PHP_SELF'].'?id='.$objectstatic->id;
|
$urlsource = $_SERVER['PHP_SELF'].'?id='.$objectstatic->id;
|
||||||
$documentlink = $formfile->getDocumentsLink($objectstatic->element, $filename, $filedir);
|
$documentlink = $formfile->getDocumentsLink($objectstatic->element, $filename, $filedir);
|
||||||
|
} elseif ($line->doc_type == 'bank')
|
||||||
|
{
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
|
||||||
|
$objectstatic = new AccountLine($db);
|
||||||
|
$objectstatic->fetch($line->fk_doc);
|
||||||
} else {
|
} else {
|
||||||
// Other type
|
// Other type
|
||||||
}
|
}
|
||||||
|
|
||||||
print '<td class="nowrap">';
|
print '<td class="maxwidth400">';
|
||||||
|
|
||||||
print '<table class="nobordernopadding"><tr class="nocellnopadd">';
|
print '<table class="nobordernopadding"><tr class="nocellnopadd">';
|
||||||
// Picto + Ref
|
// Picto + Ref
|
||||||
print '<td class="nobordernopadding nowrap">';
|
print '<td class="nobordernopadding">';
|
||||||
|
|
||||||
if ($line->doc_type == 'customer_invoice' || $line->doc_type == 'supplier_invoice' || $line->doc_type == 'expense_report')
|
if ($line->doc_type == 'customer_invoice' || $line->doc_type == 'supplier_invoice' || $line->doc_type == 'expense_report')
|
||||||
{
|
{
|
||||||
print $objectstatic->getNomUrl(1, '', 0, 0, '', 0, -1, 1);
|
print $objectstatic->getNomUrl(1, '', 0, 0, '', 0, -1, 1);
|
||||||
print $documentlink;
|
print $documentlink;
|
||||||
|
} elseif ($line->doc_type == 'bank') {
|
||||||
|
print $objectstatic->getNomUrl(1);
|
||||||
|
$bank_ref = strstr($line->doc_ref, '-');
|
||||||
|
print " " . $bank_ref;
|
||||||
} else {
|
} else {
|
||||||
print $line->doc_ref;
|
print $line->doc_ref;
|
||||||
}
|
}
|
||||||
@ -718,8 +771,15 @@ while ($i < min($num, $limit))
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Show sub-total of last shown account
|
// Show sub-total of last shown account
|
||||||
$colspan = $totalarray['nbfield'] - 3;
|
if (empty($conf->global->ACCOUNTING_ENABLE_LETTERING) || empty($arrayfields['t.lettering_code']['checked'])) {
|
||||||
$colspanend = $totalarray['nbfield'] - 8;
|
$colnumber = 3;
|
||||||
|
$colnumberend = 7;
|
||||||
|
} else {
|
||||||
|
$colnumber = 4;
|
||||||
|
$colnumberend = 7;
|
||||||
|
}
|
||||||
|
$colspan = $totalarray['nbfield'] - $colnumber;
|
||||||
|
$colspanend = $totalarray['nbfield'] - $colnumberend;
|
||||||
print '<tr class="liste_total">';
|
print '<tr class="liste_total">';
|
||||||
print '<td class="right" colspan="'.$colspan.'">'.$langs->trans("TotalForAccount").' '.$accountg.':</td>';
|
print '<td class="right" colspan="'.$colspan.'">'.$langs->trans("TotalForAccount").' '.$accountg.':</td>';
|
||||||
print '<td class="nowrap right">'.price($sous_total_debit).'</td>';
|
print '<td class="nowrap right">'.price($sous_total_debit).'</td>';
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
* Copyright (C) 2013 Olivier Geffroy <jeff@jeffinfo.com>
|
* Copyright (C) 2013 Olivier Geffroy <jeff@jeffinfo.com>
|
||||||
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
|
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
|
||||||
* Copyright (C) 2013-2019 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
* Copyright (C) 2013-2019 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||||
* Copyright (C) 2018-2019 Frédéric France <frederic.france@netlogic.fr>
|
* Copyright (C) 2018-2020 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
|
||||||
* 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
|
||||||
@ -41,7 +41,7 @@ $massaction = GETPOST('massaction', 'alpha');
|
|||||||
$show_files = GETPOST('show_files', 'int');
|
$show_files = GETPOST('show_files', 'int');
|
||||||
$confirm = GETPOST('confirm', 'alpha');
|
$confirm = GETPOST('confirm', 'alpha');
|
||||||
$toselect = GETPOST('toselect', 'array');
|
$toselect = GETPOST('toselect', 'array');
|
||||||
$socid = GETPOST('socid', 'int') ?GETPOST('socid', 'int') : GETPOST('id', 'int');
|
$socid = GETPOST('socid', 'int') ? ((int) GETPOST('socid', 'int')) : ((int) GETPOST('id', 'int'));
|
||||||
|
|
||||||
$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit;
|
$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit;
|
||||||
$sortfield = GETPOST("sortfield", 'alpha');
|
$sortfield = GETPOST("sortfield", 'alpha');
|
||||||
|
|||||||
@ -57,7 +57,10 @@ class AccountancyExport
|
|||||||
public static $EXPORT_TYPE_OPENCONCERTO = 100;
|
public static $EXPORT_TYPE_OPENCONCERTO = 100;
|
||||||
public static $EXPORT_TYPE_LDCOMPTA = 110;
|
public static $EXPORT_TYPE_LDCOMPTA = 110;
|
||||||
public static $EXPORT_TYPE_LDCOMPTA10 = 120;
|
public static $EXPORT_TYPE_LDCOMPTA10 = 120;
|
||||||
|
public static $EXPORT_TYPE_GESTINUMV3 = 130;
|
||||||
|
public static $EXPORT_TYPE_GESTINUMV5 = 135;
|
||||||
public static $EXPORT_TYPE_FEC = 1000;
|
public static $EXPORT_TYPE_FEC = 1000;
|
||||||
|
public static $EXPORT_TYPE_FEC2 = 1010;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -113,10 +116,13 @@ class AccountancyExport
|
|||||||
self::$EXPORT_TYPE_AGIRIS => $langs->trans('Modelcsv_agiris'),
|
self::$EXPORT_TYPE_AGIRIS => $langs->trans('Modelcsv_agiris'),
|
||||||
self::$EXPORT_TYPE_OPENCONCERTO => $langs->trans('Modelcsv_openconcerto'),
|
self::$EXPORT_TYPE_OPENCONCERTO => $langs->trans('Modelcsv_openconcerto'),
|
||||||
self::$EXPORT_TYPE_SAGE50_SWISS => $langs->trans('Modelcsv_Sage50_Swiss'),
|
self::$EXPORT_TYPE_SAGE50_SWISS => $langs->trans('Modelcsv_Sage50_Swiss'),
|
||||||
|
self::$EXPORT_TYPE_CHARLEMAGNE => $langs->trans('Modelcsv_charlemagne'),
|
||||||
self::$EXPORT_TYPE_LDCOMPTA => $langs->trans('Modelcsv_LDCompta'),
|
self::$EXPORT_TYPE_LDCOMPTA => $langs->trans('Modelcsv_LDCompta'),
|
||||||
self::$EXPORT_TYPE_LDCOMPTA10 => $langs->trans('Modelcsv_LDCompta10'),
|
self::$EXPORT_TYPE_LDCOMPTA10 => $langs->trans('Modelcsv_LDCompta10'),
|
||||||
|
self::$EXPORT_TYPE_GESTINUMV3 => $langs->trans('Modelcsv_Gestinum_v3'),
|
||||||
|
self::$EXPORT_TYPE_GESTINUMV5 => $langs->trans('Modelcsv_Gestinum_v5'),
|
||||||
self::$EXPORT_TYPE_FEC => $langs->trans('Modelcsv_FEC'),
|
self::$EXPORT_TYPE_FEC => $langs->trans('Modelcsv_FEC'),
|
||||||
self::$EXPORT_TYPE_CHARLEMAGNE => $langs->trans('Modelcsv_charlemagne'),
|
self::$EXPORT_TYPE_FEC2 => $langs->trans('Modelcsv_FEC2'),
|
||||||
);
|
);
|
||||||
|
|
||||||
ksort($listofexporttypes, SORT_NUMERIC);
|
ksort($listofexporttypes, SORT_NUMERIC);
|
||||||
@ -145,9 +151,13 @@ class AccountancyExport
|
|||||||
self::$EXPORT_TYPE_AGIRIS => 'agiris',
|
self::$EXPORT_TYPE_AGIRIS => 'agiris',
|
||||||
self::$EXPORT_TYPE_OPENCONCERTO => 'openconcerto',
|
self::$EXPORT_TYPE_OPENCONCERTO => 'openconcerto',
|
||||||
self::$EXPORT_TYPE_SAGE50_SWISS => 'sage50ch',
|
self::$EXPORT_TYPE_SAGE50_SWISS => 'sage50ch',
|
||||||
|
self::$EXPORT_TYPE_CHARLEMAGNE => 'charlemagne',
|
||||||
self::$EXPORT_TYPE_LDCOMPTA => 'ldcompta',
|
self::$EXPORT_TYPE_LDCOMPTA => 'ldcompta',
|
||||||
self::$EXPORT_TYPE_LDCOMPTA10 => 'ldcompta10',
|
self::$EXPORT_TYPE_LDCOMPTA10 => 'ldcompta10',
|
||||||
|
self::$EXPORT_TYPE_GESTINUMV3 => 'gestinumv3',
|
||||||
|
self::$EXPORT_TYPE_GESTINUMV5 => 'gestinumv5',
|
||||||
self::$EXPORT_TYPE_FEC => 'fec',
|
self::$EXPORT_TYPE_FEC => 'fec',
|
||||||
|
self::$EXPORT_TYPE_FEC2 => 'fec2',
|
||||||
);
|
);
|
||||||
|
|
||||||
return $formatcode[$type];
|
return $formatcode[$type];
|
||||||
@ -203,26 +213,32 @@ class AccountancyExport
|
|||||||
),
|
),
|
||||||
self::$EXPORT_TYPE_OPENCONCERTO => array(
|
self::$EXPORT_TYPE_OPENCONCERTO => array(
|
||||||
'label' => $langs->trans('Modelcsv_openconcerto'),
|
'label' => $langs->trans('Modelcsv_openconcerto'),
|
||||||
'ACCOUNTING_EXPORT_FORMAT' => 'csv',
|
|
||||||
),
|
),
|
||||||
self::$EXPORT_TYPE_SAGE50_SWISS => array(
|
self::$EXPORT_TYPE_SAGE50_SWISS => array(
|
||||||
'label' => $langs->trans('Modelcsv_Sage50_Swiss'),
|
'label' => $langs->trans('Modelcsv_Sage50_Swiss'),
|
||||||
'ACCOUNTING_EXPORT_FORMAT' => 'csv',
|
),
|
||||||
|
self::$EXPORT_TYPE_CHARLEMAGNE => array(
|
||||||
|
'label' => $langs->trans('Modelcsv_charlemagne'),
|
||||||
|
'ACCOUNTING_EXPORT_FORMAT' => 'txt',
|
||||||
),
|
),
|
||||||
self::$EXPORT_TYPE_LDCOMPTA => array(
|
self::$EXPORT_TYPE_LDCOMPTA => array(
|
||||||
'label' => $langs->trans('Modelcsv_LDCompta'),
|
'label' => $langs->trans('Modelcsv_LDCompta'),
|
||||||
'ACCOUNTING_EXPORT_FORMAT' => 'csv',
|
|
||||||
),
|
),
|
||||||
self::$EXPORT_TYPE_LDCOMPTA10 => array(
|
self::$EXPORT_TYPE_LDCOMPTA10 => array(
|
||||||
'label' => $langs->trans('Modelcsv_LDCompta10'),
|
'label' => $langs->trans('Modelcsv_LDCompta10'),
|
||||||
'ACCOUNTING_EXPORT_FORMAT' => 'csv',
|
),
|
||||||
|
self::$EXPORT_TYPE_GESTINUMV3 => array(
|
||||||
|
'label' => $langs->trans('Modelcsv_Gestinumv3'),
|
||||||
|
),
|
||||||
|
self::$EXPORT_TYPE_GESTINUMV5 => array(
|
||||||
|
'label' => $langs->trans('Modelcsv_Gestinumv5'),
|
||||||
),
|
),
|
||||||
self::$EXPORT_TYPE_FEC => array(
|
self::$EXPORT_TYPE_FEC => array(
|
||||||
'label' => $langs->trans('Modelcsv_FEC'),
|
'label' => $langs->trans('Modelcsv_FEC'),
|
||||||
'ACCOUNTING_EXPORT_FORMAT' => 'txt',
|
'ACCOUNTING_EXPORT_FORMAT' => 'txt',
|
||||||
),
|
),
|
||||||
self::$EXPORT_TYPE_CHARLEMAGNE => array(
|
self::$EXPORT_TYPE_FEC2 => array(
|
||||||
'label' => $langs->trans('Modelcsv_charlemagne'),
|
'label' => $langs->trans('Modelcsv_FEC2'),
|
||||||
'ACCOUNTING_EXPORT_FORMAT' => 'txt',
|
'ACCOUNTING_EXPORT_FORMAT' => 'txt',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -295,17 +311,26 @@ class AccountancyExport
|
|||||||
case self::$EXPORT_TYPE_SAGE50_SWISS :
|
case self::$EXPORT_TYPE_SAGE50_SWISS :
|
||||||
$this->exportSAGE50SWISS($TData);
|
$this->exportSAGE50SWISS($TData);
|
||||||
break;
|
break;
|
||||||
|
case self::$EXPORT_TYPE_CHARLEMAGNE :
|
||||||
|
$this->exportCharlemagne($TData);
|
||||||
|
break;
|
||||||
case self::$EXPORT_TYPE_LDCOMPTA :
|
case self::$EXPORT_TYPE_LDCOMPTA :
|
||||||
$this->exportLDCompta($TData);
|
$this->exportLDCompta($TData);
|
||||||
break;
|
break;
|
||||||
case self::$EXPORT_TYPE_LDCOMPTA10 :
|
case self::$EXPORT_TYPE_LDCOMPTA10 :
|
||||||
$this->exportLDCompta10($TData);
|
$this->exportLDCompta10($TData);
|
||||||
break;
|
break;
|
||||||
|
case self::$EXPORT_TYPE_GESTINUMV3 :
|
||||||
|
$this->exportGestimumV3($TData);
|
||||||
|
break;
|
||||||
|
case self::$EXPORT_TYPE_GESTINUMV5 :
|
||||||
|
$this->exportGestimumV5($TData);
|
||||||
|
break;
|
||||||
case self::$EXPORT_TYPE_FEC :
|
case self::$EXPORT_TYPE_FEC :
|
||||||
$this->exportFEC($TData);
|
$this->exportFEC($TData);
|
||||||
break;
|
break;
|
||||||
case self::$EXPORT_TYPE_CHARLEMAGNE :
|
case self::$EXPORT_TYPE_FEC2 :
|
||||||
$this->exportCharlemagne($TData);
|
$this->exportFEC2($TData);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
$this->errors[] = $langs->trans('accountancy_error_modelnotfound');
|
$this->errors[] = $langs->trans('accountancy_error_modelnotfound');
|
||||||
@ -386,6 +411,7 @@ class AccountancyExport
|
|||||||
|
|
||||||
foreach ($objectLines as $line) {
|
foreach ($objectLines as $line) {
|
||||||
$date = dol_print_date($line->doc_date, '%d/%m/%Y');
|
$date = dol_print_date($line->doc_date, '%d/%m/%Y');
|
||||||
|
|
||||||
print $date.$separator;
|
print $date.$separator;
|
||||||
print $line->code_journal.$separator;
|
print $line->code_journal.$separator;
|
||||||
print length_accountg($line->numero_compte).$separator;
|
print length_accountg($line->numero_compte).$separator;
|
||||||
@ -394,7 +420,7 @@ class AccountancyExport
|
|||||||
print price($line->debit).$separator;
|
print price($line->debit).$separator;
|
||||||
print price($line->credit).$separator;
|
print price($line->credit).$separator;
|
||||||
print 'E'.$separator;
|
print 'E'.$separator;
|
||||||
print length_accountg($line->subledger_account).$separator;
|
print length_accounta($line->subledger_account).$separator;
|
||||||
print $end_line;
|
print $end_line;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -489,9 +515,9 @@ class AccountancyExport
|
|||||||
|
|
||||||
$end_line = "\r\n";
|
$end_line = "\r\n";
|
||||||
|
|
||||||
//We should use dol_now function not time however this is wrong date to transfert in accounting
|
// We should use dol_now function not time however this is wrong date to transfert in accounting
|
||||||
//$date_ecriture = dol_print_date(dol_now(), $conf->global->ACCOUNTING_EXPORT_DATE); // format must be ddmmyy
|
// $date_ecriture = dol_print_date(dol_now(), $conf->global->ACCOUNTING_EXPORT_DATE); // format must be ddmmyy
|
||||||
//$date_ecriture = dol_print_date(time(), $conf->global->ACCOUNTING_EXPORT_DATE); // format must be ddmmyy
|
// $date_ecriture = dol_print_date(time(), $conf->global->ACCOUNTING_EXPORT_DATE); // format must be ddmmyy
|
||||||
foreach ($TData as $data) {
|
foreach ($TData as $data) {
|
||||||
$code_compta = $data->numero_compte;
|
$code_compta = $data->numero_compte;
|
||||||
if (!empty($data->subledger_account))
|
if (!empty($data->subledger_account))
|
||||||
@ -503,36 +529,46 @@ class AccountancyExport
|
|||||||
$Tab['code_journal'] = str_pad(self::trunc($data->code_journal, 2), 2);
|
$Tab['code_journal'] = str_pad(self::trunc($data->code_journal, 2), 2);
|
||||||
$Tab['folio'] = '000';
|
$Tab['folio'] = '000';
|
||||||
|
|
||||||
//We use invoice date $data->doc_date not $date_ecriture which is the transfert date
|
// We use invoice date $data->doc_date not $date_ecriture which is the transfert date
|
||||||
//maybe we should set an option for customer who prefer to keep in accounting software the tranfert date instead of invoice date ?
|
// maybe we should set an option for customer who prefer to keep in accounting software the tranfert date instead of invoice date ?
|
||||||
//$Tab['date_ecriture'] = $date_ecriture;
|
//$Tab['date_ecriture'] = $date_ecriture;
|
||||||
$Tab['date_ecriture'] = dol_print_date($data->doc_date, '%d%m%y');
|
$Tab['date_ecriture'] = dol_print_date($data->doc_date, '%d%m%y');
|
||||||
$Tab['filler'] = ' ';
|
$Tab['filler'] = ' ';
|
||||||
$Tab['libelle_ecriture'] = str_pad(self::trunc(dol_string_unaccent($data->doc_ref).' '.dol_string_unaccent($data->label_operation), 20), 20);
|
$Tab['libelle_ecriture'] = str_pad(self::trunc(dol_string_unaccent($data->doc_ref).' '.dol_string_unaccent($data->label_operation), 20), 20);
|
||||||
$Tab['sens'] = $data->sens; // C or D
|
|
||||||
$Tab['signe_montant'] = '+';
|
|
||||||
|
|
||||||
//elarifr le montant doit etre en centimes sans point decimal !
|
// Credit invoice - invert sens
|
||||||
$Tab['montant'] = str_pad(abs($data->montant * 100), 12, '0', STR_PAD_LEFT); // TODO manage negative amount
|
if ($data->montant < 0) {
|
||||||
// $Tab['montant'] = str_pad(abs($data->montant), 12, '0', STR_PAD_LEFT); // TODO manage negative amount
|
if ($data->sens == 'C') {
|
||||||
|
$Tab['sens'] = 'D';
|
||||||
|
} else {
|
||||||
|
$Tab['sens'] = 'C';
|
||||||
|
}
|
||||||
|
$Tab['signe_montant'] = '-';
|
||||||
|
} else {
|
||||||
|
$Tab['sens'] = $data->sens; // C or D
|
||||||
|
$Tab['signe_montant'] = '+';
|
||||||
|
}
|
||||||
|
|
||||||
|
// The amount must be in centimes without decimal points.
|
||||||
|
$Tab['montant'] = str_pad(abs($data->montant * 100), 12, '0', STR_PAD_LEFT);
|
||||||
$Tab['contrepartie'] = str_repeat(' ', 8);
|
$Tab['contrepartie'] = str_repeat(' ', 8);
|
||||||
|
|
||||||
// elarifr: date format must be fixed format : 6 char ddmmyy = %d%m%yand not defined by user / dolibarr setting
|
// Force date format : %d%m%y
|
||||||
if (!empty($data->date_echeance)) {
|
if (!empty($data->date_echeance)) {
|
||||||
//$Tab['date_echeance'] = dol_print_date($data->date_echeance, $conf->global->ACCOUNTING_EXPORT_DATE);
|
//$Tab['date_echeance'] = dol_print_date($data->date_echeance, $conf->global->ACCOUNTING_EXPORT_DATE);
|
||||||
$Tab['date_echeance'] = dol_print_date($data->date_echeance, '%d%m%y'); // elarifr: format must be ddmmyy
|
$Tab['date_echeance'] = dol_print_date($data->date_echeance, '%d%m%y'); // Format must be ddmmyy
|
||||||
} else {
|
} else {
|
||||||
$Tab['date_echeance'] = '000000';
|
$Tab['date_echeance'] = '000000';
|
||||||
}
|
}
|
||||||
|
|
||||||
//elarifr please keep quadra named field lettrage(2) + codestat(3) instead of fake lettrage(5)
|
// Please keep quadra named field lettrage(2) + codestat(3) instead of fake lettrage(5)
|
||||||
//$Tab['lettrage'] = str_repeat(' ', 5);
|
// $Tab['lettrage'] = str_repeat(' ', 5);
|
||||||
$Tab['lettrage'] = str_repeat(' ', 2);
|
$Tab['lettrage'] = str_repeat(' ', 2);
|
||||||
$Tab['codestat'] = str_repeat(' ', 3);
|
$Tab['codestat'] = str_repeat(' ', 3);
|
||||||
$Tab['num_piece'] = str_pad(self::trunc($data->piece_num, 5), 5);
|
$Tab['num_piece'] = str_pad(self::trunc($data->piece_num, 5), 5);
|
||||||
|
|
||||||
//elarifr keep correct quadra named field instead of anon filler
|
// Keep correct quadra named field instead of anon filler
|
||||||
//$Tab['filler2'] = str_repeat(' ', 20);
|
// $Tab['filler2'] = str_repeat(' ', 20);
|
||||||
$Tab['affaire'] = str_repeat(' ', 10);
|
$Tab['affaire'] = str_repeat(' ', 10);
|
||||||
$Tab['quantity1'] = str_repeat(' ', 10);
|
$Tab['quantity1'] = str_repeat(' ', 10);
|
||||||
$Tab['num_piece2'] = str_pad(self::trunc($data->piece_num, 8), 8);
|
$Tab['num_piece2'] = str_pad(self::trunc($data->piece_num, 8), 8);
|
||||||
@ -540,17 +576,17 @@ class AccountancyExport
|
|||||||
$Tab['code_journal2'] = str_pad(self::trunc($data->code_journal, 3), 3);
|
$Tab['code_journal2'] = str_pad(self::trunc($data->code_journal, 3), 3);
|
||||||
$Tab['filler3'] = str_repeat(' ', 3);
|
$Tab['filler3'] = str_repeat(' ', 3);
|
||||||
|
|
||||||
//elarifr keep correct quadra named field instead of anon filler libelle_ecriture2 is 30 char not 32 !!!!
|
// Keep correct quadra named field instead of anon filler libelle_ecriture2 is 30 char not 32 !!!!
|
||||||
//as we use utf8, we must remove accent to have only one ascii char instead of utf8 2 chars for specials that report wrong line size that will exceed import format spec
|
// as we use utf8, we must remove accent to have only one ascii char instead of utf8 2 chars for specials that report wrong line size that will exceed import format spec
|
||||||
//todo we should filter more than only accent to avoid wrong line size
|
// TODO: we should filter more than only accent to avoid wrong line size
|
||||||
//TODO: remove invoice number doc_ref in libelle,
|
// TODO: remove invoice number doc_ref in libelle,
|
||||||
//TODO: we should offer an option for customer to build the libelle using invoice number / name / date in accounting software
|
// TODO: we should offer an option for customer to build the libelle using invoice number / name / date in accounting software
|
||||||
//$Tab['libelle_ecriture2'] = str_pad(self::trunc(dol_string_unaccent($data->doc_ref) . ' ' . dol_string_unaccent($data->label_operation), 30), 30);
|
//$Tab['libelle_ecriture2'] = str_pad(self::trunc(dol_string_unaccent($data->doc_ref) . ' ' . dol_string_unaccent($data->label_operation), 30), 30);
|
||||||
$Tab['libelle_ecriture2'] = str_pad(self::trunc(dol_string_unaccent($data->label_operation), 30), 30);
|
$Tab['libelle_ecriture2'] = str_pad(self::trunc(dol_string_unaccent($data->label_operation), 30), 30);
|
||||||
$Tab['codetva'] = str_repeat(' ', 2);
|
$Tab['codetva'] = str_repeat(' ', 2);
|
||||||
|
|
||||||
//elarifr we need to keep the 10 lastest number of invoice doc_ref not the beginning part that is the unusefull almost same part
|
// We need to keep the 10 lastest number of invoice doc_ref not the beginning part that is the unusefull almost same part
|
||||||
//$Tab['num_piece3'] = str_pad(self::trunc($data->piece_num, 10), 10);
|
// $Tab['num_piece3'] = str_pad(self::trunc($data->piece_num, 10), 10);
|
||||||
$Tab['num_piece3'] = substr(self::trunc($data->doc_ref, 20), -10);
|
$Tab['num_piece3'] = substr(self::trunc($data->doc_ref, 20), -10);
|
||||||
$Tab['filler4'] = str_repeat(' ', 73);
|
$Tab['filler4'] = str_repeat(' ', 73);
|
||||||
|
|
||||||
@ -785,7 +821,7 @@ class AccountancyExport
|
|||||||
public function exportFEC($objectLines)
|
public function exportFEC($objectLines)
|
||||||
{
|
{
|
||||||
$separator = "\t";
|
$separator = "\t";
|
||||||
$end_line = "\n";
|
$end_line = "\r\n";
|
||||||
|
|
||||||
print "JournalCode".$separator;
|
print "JournalCode".$separator;
|
||||||
print "JournalLib".$separator;
|
print "JournalLib".$separator;
|
||||||
@ -808,65 +844,169 @@ class AccountancyExport
|
|||||||
print $end_line;
|
print $end_line;
|
||||||
|
|
||||||
foreach ($objectLines as $line) {
|
foreach ($objectLines as $line) {
|
||||||
$date_creation = dol_print_date($line->date_creation, '%Y%m%d');
|
if ($line->debit == 0 && $line->credit == 0) {
|
||||||
$date_document = dol_print_date($line->doc_date, '%Y%m%d');
|
unset($array[$line]);
|
||||||
$date_validation = dol_print_date($line->date_validated, '%Y%m%d');
|
} else {
|
||||||
|
$date_creation = dol_print_date($line->date_creation, '%Y%m%d');
|
||||||
|
$date_document = dol_print_date($line->doc_date, '%Y%m%d');
|
||||||
|
$date_lettering = dol_print_date($line->date_lettering, '%Y%m%d');
|
||||||
|
$date_validation = dol_print_date($line->date_validated, '%Y%m%d');
|
||||||
|
|
||||||
// FEC:JournalCode
|
// FEC:JournalCode
|
||||||
print $line->code_journal.$separator;
|
print $line->code_journal.$separator;
|
||||||
|
|
||||||
// FEC:JournalLib
|
// FEC:JournalLib
|
||||||
print $line->journal_label.$separator;
|
print $line->journal_label.$separator;
|
||||||
|
|
||||||
// FEC:EcritureNum
|
// FEC:EcritureNum
|
||||||
print $line->piece_num.$separator;
|
print $line->piece_num.$separator;
|
||||||
|
|
||||||
// FEC:EcritureDate
|
// FEC:EcritureDate
|
||||||
print $date_document.$separator;
|
print $date_document.$separator;
|
||||||
|
|
||||||
// FEC:CompteNum
|
// FEC:CompteNum
|
||||||
print $line->numero_compte.$separator;
|
print $line->numero_compte.$separator;
|
||||||
|
|
||||||
// FEC:CompteLib
|
// FEC:CompteLib
|
||||||
print dol_string_unaccent($line->label_compte).$separator;
|
print dol_string_unaccent($line->label_compte).$separator;
|
||||||
|
|
||||||
// FEC:CompAuxNum
|
// FEC:CompAuxNum
|
||||||
print $line->subledger_account.$separator;
|
print $line->subledger_account.$separator;
|
||||||
|
|
||||||
// FEC:CompAuxLib
|
// FEC:CompAuxLib
|
||||||
print dol_string_unaccent($line->subledger_label).$separator;
|
print dol_string_unaccent($line->subledger_label).$separator;
|
||||||
|
|
||||||
// FEC:PieceRef
|
// FEC:PieceRef
|
||||||
print $line->doc_ref.$separator;
|
print $line->doc_ref.$separator;
|
||||||
|
|
||||||
// FEC:PieceDate
|
// FEC:PieceDate
|
||||||
print dol_string_unaccent($date_creation).$separator;
|
print dol_string_unaccent($date_creation).$separator;
|
||||||
|
|
||||||
// FEC:EcritureLib
|
// FEC:EcritureLib
|
||||||
print $line->label_operation.$separator;
|
print dol_string_unaccent($line->label_operation).$separator;
|
||||||
|
|
||||||
// FEC:Debit
|
// FEC:Debit
|
||||||
print price2fec($line->debit).$separator;
|
print price2fec($line->debit).$separator;
|
||||||
|
|
||||||
// FEC:Credit
|
// FEC:Credit
|
||||||
print price2fec($line->credit).$separator;
|
print price2fec($line->credit).$separator;
|
||||||
|
|
||||||
// FEC:EcritureLet
|
// FEC:EcritureLet
|
||||||
print $line->lettering_code.$separator;
|
print $line->lettering_code.$separator;
|
||||||
|
|
||||||
// FEC:DateLet
|
// FEC:DateLet
|
||||||
print $line->date_lettering.$separator;
|
print $date_lettering.$separator;
|
||||||
|
|
||||||
// FEC:ValidDate
|
// FEC:ValidDate
|
||||||
print $date_validation.$separator;
|
print $date_validation.$separator;
|
||||||
|
|
||||||
// FEC:Montantdevise
|
// FEC:Montantdevise
|
||||||
print $line->multicurrency_amount.$separator;
|
print $line->multicurrency_amount.$separator;
|
||||||
|
|
||||||
// FEC:Idevise
|
// FEC:Idevise
|
||||||
print $line->multicurrency_code;
|
print $line->multicurrency_code;
|
||||||
|
|
||||||
print $end_line;
|
print $end_line;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Export format : FEC2
|
||||||
|
*
|
||||||
|
* @param array $objectLines data
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function exportFEC2($objectLines)
|
||||||
|
{
|
||||||
|
$separator = "\t";
|
||||||
|
$end_line = "\r\n";
|
||||||
|
|
||||||
|
print "JournalCode".$separator;
|
||||||
|
print "JournalLib".$separator;
|
||||||
|
print "EcritureNum".$separator;
|
||||||
|
print "EcritureDate".$separator;
|
||||||
|
print "CompteNum".$separator;
|
||||||
|
print "CompteLib".$separator;
|
||||||
|
print "CompAuxNum".$separator;
|
||||||
|
print "CompAuxLib".$separator;
|
||||||
|
print "PieceRef".$separator;
|
||||||
|
print "PieceDate".$separator;
|
||||||
|
print "EcritureLib".$separator;
|
||||||
|
print "Debit".$separator;
|
||||||
|
print "Credit".$separator;
|
||||||
|
print "EcritureLet".$separator;
|
||||||
|
print "DateLet".$separator;
|
||||||
|
print "ValidDate".$separator;
|
||||||
|
print "Montantdevise".$separator;
|
||||||
|
print "Idevise";
|
||||||
|
print $end_line;
|
||||||
|
|
||||||
|
foreach ($objectLines as $line) {
|
||||||
|
if ($line->debit == 0 && $line->credit == 0) {
|
||||||
|
unset($array[$line]);
|
||||||
|
} else {
|
||||||
|
$date_creation = dol_print_date($line->date_creation, '%Y%m%d');
|
||||||
|
$date_document = dol_print_date($line->doc_date, '%Y%m%d');
|
||||||
|
$date_lettering = dol_print_date($line->date_lettering, '%Y%m%d');
|
||||||
|
$date_validation = dol_print_date($line->date_validated, '%Y%m%d');
|
||||||
|
|
||||||
|
// FEC:JournalCode
|
||||||
|
print $line->code_journal . $separator;
|
||||||
|
|
||||||
|
// FEC:JournalLib
|
||||||
|
print $line->journal_label . $separator;
|
||||||
|
|
||||||
|
// FEC:EcritureNum
|
||||||
|
print $line->piece_num . $separator;
|
||||||
|
|
||||||
|
// FEC:EcritureDate
|
||||||
|
print $date_creation . $separator;
|
||||||
|
|
||||||
|
// FEC:CompteNum
|
||||||
|
print $line->numero_compte . $separator;
|
||||||
|
|
||||||
|
// FEC:CompteLib
|
||||||
|
print dol_string_unaccent($line->label_compte) . $separator;
|
||||||
|
|
||||||
|
// FEC:CompAuxNum
|
||||||
|
print $line->subledger_account . $separator;
|
||||||
|
|
||||||
|
// FEC:CompAuxLib
|
||||||
|
print dol_string_unaccent($line->subledger_label) . $separator;
|
||||||
|
|
||||||
|
// FEC:PieceRef
|
||||||
|
print $line->doc_ref . $separator;
|
||||||
|
|
||||||
|
// FEC:PieceDate
|
||||||
|
print $date_document . $separator;
|
||||||
|
|
||||||
|
// FEC:EcritureLib
|
||||||
|
print dol_string_unaccent($line->label_operation) . $separator;
|
||||||
|
|
||||||
|
// FEC:Debit
|
||||||
|
print price2fec($line->debit) . $separator;
|
||||||
|
|
||||||
|
// FEC:Credit
|
||||||
|
print price2fec($line->credit) . $separator;
|
||||||
|
|
||||||
|
// FEC:EcritureLet
|
||||||
|
print $line->lettering_code . $separator;
|
||||||
|
|
||||||
|
// FEC:DateLet
|
||||||
|
print $date_lettering . $separator;
|
||||||
|
|
||||||
|
// FEC:ValidDate
|
||||||
|
print $date_validation . $separator;
|
||||||
|
|
||||||
|
// FEC:Montantdevise
|
||||||
|
print $line->multicurrency_amount . $separator;
|
||||||
|
|
||||||
|
// FEC:Idevise
|
||||||
|
print $line->multicurrency_code;
|
||||||
|
|
||||||
|
print $end_line;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1468,6 +1608,136 @@ class AccountancyExport
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Export format : Gestimum V3
|
||||||
|
*
|
||||||
|
* @param array $objectLines data
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function exportGestimumV3($objectLines)
|
||||||
|
{
|
||||||
|
global $langs;
|
||||||
|
|
||||||
|
$this->separator = ',';
|
||||||
|
|
||||||
|
$invoices_infos = array();
|
||||||
|
$supplier_invoices_infos = array();
|
||||||
|
foreach ($objectLines as $line) {
|
||||||
|
$date = dol_print_date($line->doc_date, '%d/%m/%Y');
|
||||||
|
|
||||||
|
$invoice_ref = $line->doc_ref;
|
||||||
|
$company_name = "";
|
||||||
|
|
||||||
|
if (($line->doc_type == 'customer_invoice' || $line->doc_type == 'supplier_invoice') && $line->fk_doc > 0) {
|
||||||
|
if (($line->doc_type == 'customer_invoice' && !isset($invoices_infos[$line->fk_doc])) ||
|
||||||
|
($line->doc_type == 'supplier_invoice' && !isset($supplier_invoices_infos[$line->fk_doc]))) {
|
||||||
|
if ($line->doc_type == 'customer_invoice') {
|
||||||
|
// Get new customer invoice ref and company name
|
||||||
|
$sql = 'SELECT f.facnumber, s.nom FROM ' . MAIN_DB_PREFIX . 'facture as f';
|
||||||
|
$sql .= ' LEFT JOIN ' . MAIN_DB_PREFIX . 'societe AS s ON f.fk_soc = s.rowid';
|
||||||
|
$sql .= ' WHERE f.rowid = ' . $line->fk_doc;
|
||||||
|
$resql = $this->db->query($sql);
|
||||||
|
if ($resql) {
|
||||||
|
if ($obj = $this->db->fetch_object($resql)) {
|
||||||
|
// Save invoice infos
|
||||||
|
$invoices_infos[$line->fk_doc] = array('ref' => $obj->facnumber, 'company_name' => $obj->nom);
|
||||||
|
$invoice_ref = $obj->facnumber;
|
||||||
|
$company_name = $obj->nom;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Get new supplier invoice ref and company name
|
||||||
|
$sql = 'SELECT ff.ref, s.nom FROM ' . MAIN_DB_PREFIX . 'facture_fourn as ff';
|
||||||
|
$sql .= ' LEFT JOIN ' . MAIN_DB_PREFIX . 'societe AS s ON ff.fk_soc = s.rowid';
|
||||||
|
$sql .= ' WHERE ff.rowid = ' . $line->fk_doc;
|
||||||
|
$resql = $this->db->query($sql);
|
||||||
|
if ($resql) {
|
||||||
|
if ($obj = $this->db->fetch_object($resql)) {
|
||||||
|
// Save invoice infos
|
||||||
|
$supplier_invoices_infos[$line->fk_doc] = array('ref' => $obj->ref, 'company_name' => $obj->nom);
|
||||||
|
$invoice_ref = $obj->ref;
|
||||||
|
$company_name = $obj->nom;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} elseif ($line->doc_type == 'customer_invoice') {
|
||||||
|
// Retrieve invoice infos
|
||||||
|
$invoice_ref = $invoices_infos[$line->fk_doc]['ref'];
|
||||||
|
$company_name = $invoices_infos[$line->fk_doc]['company_name'];
|
||||||
|
} else {
|
||||||
|
// Retrieve invoice infos
|
||||||
|
$invoice_ref = $supplier_invoices_infos[$line->fk_doc]['ref'];
|
||||||
|
$company_name = $supplier_invoices_infos[$line->fk_doc]['company_name'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
print $line->id . $this->separator;
|
||||||
|
print $date . $this->separator;
|
||||||
|
print substr($line->code_journal, 0, 4) . $this->separator;
|
||||||
|
|
||||||
|
if ((substr($line->numero_compte, 0, 3) == '411') || (substr($line->numero_compte, 0, 3) == '401')) {
|
||||||
|
print length_accountg($line->subledger_account) . $this->separator;
|
||||||
|
} else {
|
||||||
|
print substr(length_accountg($line->numero_compte), 0, 15) . $this->separator;
|
||||||
|
}
|
||||||
|
//Libellé Auto
|
||||||
|
print $this->separator;
|
||||||
|
//print '"'.dol_trunc(str_replace('"', '', $line->label_operation),40,'right','UTF-8',1).'"' . $this->separator;
|
||||||
|
//Libellé manuel
|
||||||
|
print dol_trunc(str_replace('"', '', $invoice_ref . (!empty($company_name) ? ' - ' : '') . $company_name), 40, 'right', 'UTF-8', 1) . $this->separator;
|
||||||
|
//Numéro de pièce
|
||||||
|
print dol_trunc(str_replace('"', '', $line->piece_num), 10, 'right', 'UTF-8', 1) . $this->separator;
|
||||||
|
//Devise
|
||||||
|
print 'EUR' . $this->separator;
|
||||||
|
//Montant
|
||||||
|
print price2num(abs($line->montant)) . $this->separator;
|
||||||
|
//Sens
|
||||||
|
print $line->sens . $this->separator;
|
||||||
|
//Code lettrage
|
||||||
|
print $this->separator;
|
||||||
|
//Date Echéance
|
||||||
|
print $date;
|
||||||
|
print $this->end_line;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Export format : Gestimum V5
|
||||||
|
*
|
||||||
|
* @param array $objectLines data
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function exportGestimumV5($objectLines)
|
||||||
|
{
|
||||||
|
|
||||||
|
$this->separator = ',';
|
||||||
|
|
||||||
|
foreach ($objectLines as $line) {
|
||||||
|
$date = dol_print_date($line->doc_date, '%d%m%Y');
|
||||||
|
|
||||||
|
print $line->id . $this->separator;
|
||||||
|
print $date . $this->separator;
|
||||||
|
print substr($line->code_journal, 0, 4) . $this->separator;
|
||||||
|
if ((substr($line->numero_compte, 0, 3) == '411') || (substr($line->numero_compte, 0, 3) == '401')) {
|
||||||
|
print length_accountg($line->subledger_account) . $this->separator;
|
||||||
|
} else {
|
||||||
|
print substr(length_accountg($line->numero_compte), 0, 15) . $this->separator;
|
||||||
|
}
|
||||||
|
print $this->separator;
|
||||||
|
//print '"'.dol_trunc(str_replace('"', '', $line->label_operation),40,'right','UTF-8',1).'"' . $this->separator;
|
||||||
|
print '"'.dol_trunc(str_replace('"', '', $line->doc_ref), 40, 'right', 'UTF-8', 1).'"' . $this->separator;
|
||||||
|
print '"'.dol_trunc(str_replace('"', '', $line->piece_num), 10, 'right', 'UTF-8', 1).'"'.$this->separator;
|
||||||
|
print price2num($line->montant).$this->separator;
|
||||||
|
print $line->sens.$this->separator;
|
||||||
|
print $date . $this->separator;
|
||||||
|
print $this->separator;
|
||||||
|
print $this->separator;
|
||||||
|
print 'EUR';
|
||||||
|
print $this->end_line;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* trunc
|
* trunc
|
||||||
|
|||||||
@ -460,7 +460,7 @@ class AccountingAccount extends CommonObject
|
|||||||
|
|
||||||
$result = '';
|
$result = '';
|
||||||
|
|
||||||
$url = '';
|
$url = ''; $labelurl = '';
|
||||||
if (empty($option) || $option == 'ledger') {
|
if (empty($option) || $option == 'ledger') {
|
||||||
$url = DOL_URL_ROOT.'/accountancy/bookkeeping/listbyaccount.php?search_accountancy_code_start='.urlencode($this->account_number).'&search_accountancy_code_end='.urlencode($this->account_number);
|
$url = DOL_URL_ROOT.'/accountancy/bookkeeping/listbyaccount.php?search_accountancy_code_start='.urlencode($this->account_number).'&search_accountancy_code_end='.urlencode($this->account_number);
|
||||||
$labelurl = $langs->trans("ShowAccountingAccountInLedger");
|
$labelurl = $langs->trans("ShowAccountingAccountInLedger");
|
||||||
@ -617,16 +617,13 @@ class AccountingAccount extends CommonObject
|
|||||||
// phpcs:enable
|
// phpcs:enable
|
||||||
$this->db->begin();
|
$this->db->begin();
|
||||||
|
|
||||||
if ($mode == 0)
|
$fieldtouse = 'active';
|
||||||
{
|
if ($mode == 1) {
|
||||||
$fieldtouse = 'active';
|
|
||||||
} elseif ($mode == 1)
|
|
||||||
{
|
|
||||||
$fieldtouse = 'reconcilable';
|
$fieldtouse = 'reconcilable';
|
||||||
}
|
}
|
||||||
|
|
||||||
$sql = "UPDATE ".MAIN_DB_PREFIX."accounting_account ";
|
$sql = "UPDATE ".MAIN_DB_PREFIX."accounting_account";
|
||||||
$sql .= "SET ".$fieldtouse." = '1'";
|
$sql .= " SET ".$fieldtouse." = '1'";
|
||||||
$sql .= " WHERE rowid = ".$this->db->escape($id);
|
$sql .= " WHERE rowid = ".$this->db->escape($id);
|
||||||
|
|
||||||
dol_syslog(get_class($this)."::account_activate ".$fieldtouse." sql=".$sql, LOG_DEBUG);
|
dol_syslog(get_class($this)."::account_activate ".$fieldtouse." sql=".$sql, LOG_DEBUG);
|
||||||
|
|||||||
@ -37,7 +37,7 @@ class AccountingJournal extends CommonObject
|
|||||||
public $table_element = 'accounting_journal';
|
public $table_element = 'accounting_journal';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var int Field with ID of parent key if this field has a parent
|
* @var string Fieldname with ID of parent key if this field has a parent
|
||||||
*/
|
*/
|
||||||
public $fk_element = '';
|
public $fk_element = '';
|
||||||
|
|
||||||
|
|||||||
@ -825,6 +825,10 @@ class BookKeeping extends CommonObject
|
|||||||
$sqlwhere[] = $key.'\''.$this->db->idate($value).'\'';
|
$sqlwhere[] = $key.'\''.$this->db->idate($value).'\'';
|
||||||
} elseif ($key == 't.credit' || $key == 't.debit') {
|
} elseif ($key == 't.credit' || $key == 't.debit') {
|
||||||
$sqlwhere[] = natural_search($key, $value, 1, 1);
|
$sqlwhere[] = natural_search($key, $value, 1, 1);
|
||||||
|
} elseif ($key == 't.reconciled_option') {
|
||||||
|
$sqlwhere[] = 't.lettering_code IS NULL';
|
||||||
|
} elseif ($key == 't.code_journal' && !empty($value)) {
|
||||||
|
$sqlwhere[] = natural_search("t.code_journal", join(',', $value), 3, 1);
|
||||||
} else {
|
} else {
|
||||||
$sqlwhere[] = natural_search($key, $value, 0, 1);
|
$sqlwhere[] = natural_search($key, $value, 0, 1);
|
||||||
}
|
}
|
||||||
@ -1898,23 +1902,22 @@ class BookKeeping extends CommonObject
|
|||||||
return $out;
|
return $out;
|
||||||
}
|
}
|
||||||
|
|
||||||
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
|
||||||
/**
|
/**
|
||||||
* Description of a root accounting account
|
* Return id and description of a root accounting account.
|
||||||
|
* This function takes the parent of parent to get the root account !
|
||||||
*
|
*
|
||||||
* @param string $account Accounting account
|
* @param string $account Accounting account
|
||||||
* @return string Root account
|
* @return string Root account
|
||||||
*/
|
*/
|
||||||
public function get_compte_racine($account = null)
|
public function getRootAccount($account = null)
|
||||||
{
|
{
|
||||||
// phpcs:enable
|
|
||||||
global $conf;
|
global $conf;
|
||||||
$pcgver = $conf->global->CHARTOFACCOUNTS;
|
$pcgver = $conf->global->CHARTOFACCOUNTS;
|
||||||
|
|
||||||
$sql = "SELECT root.account_number, root.label as label";
|
$sql = "SELECT root.rowid, root.account_number, root.label as label";
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."accounting_account as aa";
|
$sql .= " FROM ".MAIN_DB_PREFIX."accounting_account as aa";
|
||||||
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."accounting_system as asy ON aa.fk_pcg_version = asy.pcg_version";
|
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."accounting_system as asy ON aa.fk_pcg_version = asy.pcg_version";
|
||||||
$sql .= " AND asy.rowid = ".$pcgver;
|
$sql .= " AND asy.rowid = ".((int) $pcgver);
|
||||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."accounting_account as parent ON aa.account_parent = parent.rowid";
|
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."accounting_account as parent ON aa.account_parent = parent.rowid";
|
||||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."accounting_account as root ON parent.account_parent = root.rowid";
|
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."accounting_account as root ON parent.account_parent = root.rowid";
|
||||||
$sql .= " WHERE aa.account_number = '".$this->db->escape($account)."'";
|
$sql .= " WHERE aa.account_number = '".$this->db->escape($account)."'";
|
||||||
@ -1930,7 +1933,7 @@ class BookKeeping extends CommonObject
|
|||||||
$obj = $this->db->fetch_object($resql);
|
$obj = $this->db->fetch_object($resql);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $obj->label;
|
return array('id'=>$obj->rowid, 'account_number'=>$obj->account_number, 'label'=>$obj->label);
|
||||||
} else {
|
} else {
|
||||||
$this->error = "Error ".$this->db->lasterror();
|
$this->error = "Error ".$this->db->lasterror();
|
||||||
dol_syslog(__METHOD__." ".$this->error, LOG_ERR);
|
dol_syslog(__METHOD__." ".$this->error, LOG_ERR);
|
||||||
|
|||||||
@ -140,9 +140,9 @@ if (!empty($id)) {
|
|||||||
print dol_get_fiche_end();
|
print dol_get_fiche_end();
|
||||||
|
|
||||||
print '<div class="center">';
|
print '<div class="center">';
|
||||||
print '<input class="button" type="submit" value="'.$langs->trans("Save").'">';
|
print '<input class="button button-save" type="submit" value="'.$langs->trans("Save").'">';
|
||||||
print ' ';
|
print ' ';
|
||||||
print '<input class="button" type="submit" name="cancel" value="'.$langs->trans("Cancel").'">';
|
print '<input class="button button-cancel" type="submit" name="cancel" value="'.$langs->trans("Cancel").'">';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
|
||||||
print '</form>';
|
print '</form>';
|
||||||
|
|||||||
@ -133,7 +133,7 @@ if (is_array($changeaccount) && count($changeaccount) > 0) {
|
|||||||
}
|
}
|
||||||
if (!$error) {
|
if (!$error) {
|
||||||
$db->commit();
|
$db->commit();
|
||||||
setEventMessages($langs->trans('Save'), null, 'mesgs');
|
setEventMessages($langs->trans("Save"), null, 'mesgs');
|
||||||
} else {
|
} else {
|
||||||
$db->rollback();
|
$db->rollback();
|
||||||
setEventMessages($db->lasterror(), null, 'errors');
|
setEventMessages($db->lasterror(), null, 'errors');
|
||||||
|
|||||||
@ -149,9 +149,9 @@ if (!empty($id)) {
|
|||||||
print dol_get_fiche_end();
|
print dol_get_fiche_end();
|
||||||
|
|
||||||
print '<div class="center">';
|
print '<div class="center">';
|
||||||
print '<input class="button" type="submit" value="'.$langs->trans("Save").'">';
|
print '<input class="button button-save" type="submit" value="'.$langs->trans("Save").'">';
|
||||||
print ' ';
|
print ' ';
|
||||||
print '<input class="button" type="submit" name="cancel" value="'.$langs->trans("Cancel").'">';
|
print '<input class="button button-cancel" type="submit" name="cancel" value="'.$langs->trans("Cancel").'">';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
|
||||||
print '</form>';
|
print '</form>';
|
||||||
|
|||||||
@ -123,7 +123,7 @@ if (is_array($changeaccount) && count($changeaccount) > 0) {
|
|||||||
}
|
}
|
||||||
if (!$error) {
|
if (!$error) {
|
||||||
$db->commit();
|
$db->commit();
|
||||||
setEventMessages($langs->trans('Save'), null, 'mesgs');
|
setEventMessages($langs->trans("Save"), null, 'mesgs');
|
||||||
} else {
|
} else {
|
||||||
$db->rollback();
|
$db->rollback();
|
||||||
setEventMessages($db->lasterror(), null, 'errors');
|
setEventMessages($db->lasterror(), null, 'errors');
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
/* Copyright (C) 2016 Laurent Destailleur <eldy@users.sourceforge.net>
|
/* Copyright (C) 2016-2020 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
* Copyright (C) 2016-2019 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
* Copyright (C) 2016-2019 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||||
* Copyright (C) 2019 Frédéric France <frederic.france@netlogic.fr>
|
* Copyright (C) 2019 Frédéric France <frederic.france@netlogic.fr>
|
||||||
*
|
*
|
||||||
@ -103,13 +103,19 @@ if ($conf->accounting->enabled)
|
|||||||
|
|
||||||
// STEPS
|
// STEPS
|
||||||
$step++;
|
$step++;
|
||||||
print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescJournalSetup", $step, '<a href="'.DOL_URL_ROOT.'/accountancy/admin/journals_list.php?id=35"><strong>'.$langs->transnoentitiesnoconv("Setup").' - '.$langs->transnoentitiesnoconv("AccountingJournals").'</strong></a>');
|
$s = img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescJournalSetup", $step, '{s}');
|
||||||
|
$s = str_replace('{s}', '<a href="'.DOL_URL_ROOT.'/accountancy/admin/journals_list.php?id=35"><strong>'.$langs->transnoentitiesnoconv("Setup").' - '.$langs->transnoentitiesnoconv("AccountingJournals").'</strong></a>', $s);
|
||||||
|
print $s;
|
||||||
print "<br>\n";
|
print "<br>\n";
|
||||||
$step++;
|
$step++;
|
||||||
print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescChartModel", $step, '<a href="'.DOL_URL_ROOT.'/accountancy/admin/accountmodel.php"><strong>'.$langs->transnoentitiesnoconv("Setup").' - '.$langs->transnoentitiesnoconv("Pcg_version").'</strong></a>');
|
$s = img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescChartModel", $step, '{s}');
|
||||||
|
$s = str_replace('{s}', '<a href="'.DOL_URL_ROOT.'/accountancy/admin/accountmodel.php"><strong>'.$langs->transnoentitiesnoconv("Setup").' - '.$langs->transnoentitiesnoconv("Pcg_version").'</strong></a>', $s);
|
||||||
|
print $s;
|
||||||
print "<br>\n";
|
print "<br>\n";
|
||||||
$step++;
|
$step++;
|
||||||
print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescChart", $step, '<a href="'.DOL_URL_ROOT.'/accountancy/admin/account.php"><strong>'.$langs->transnoentitiesnoconv("Setup").' - '.$langs->transnoentitiesnoconv("Chartofaccounts").'</strong></a>');
|
$s = img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescChart", $step, '{s}');
|
||||||
|
$s = str_replace('{s}', '<a href="'.DOL_URL_ROOT.'/accountancy/admin/account.php"><strong>'.$langs->transnoentitiesnoconv("Setup").' - '.$langs->transnoentitiesnoconv("Chartofaccounts").'</strong></a>', $s);
|
||||||
|
print $s;
|
||||||
print "<br>\n";
|
print "<br>\n";
|
||||||
|
|
||||||
print "<br>\n";
|
print "<br>\n";
|
||||||
@ -118,60 +124,45 @@ if ($conf->accounting->enabled)
|
|||||||
print "<br>\n";
|
print "<br>\n";
|
||||||
|
|
||||||
$step++;
|
$step++;
|
||||||
print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescDefault", $step, '<a href="'.DOL_URL_ROOT.'/accountancy/admin/defaultaccounts.php"><strong>'.$langs->transnoentitiesnoconv("Setup").' - '.$langs->transnoentitiesnoconv("MenuDefaultAccounts").'</strong></a>');
|
$s = img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescDefault", $step, '{s}');
|
||||||
|
$s = str_replace('{s}', '<a href="'.DOL_URL_ROOT.'/accountancy/admin/defaultaccounts.php"><strong>'.$langs->transnoentitiesnoconv("Setup").' - '.$langs->transnoentitiesnoconv("MenuDefaultAccounts").'</strong></a>', $s);
|
||||||
|
print $s;
|
||||||
print "<br>\n";
|
print "<br>\n";
|
||||||
|
|
||||||
$step++;
|
$step++;
|
||||||
print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescBank", $step, '<a href="'.DOL_URL_ROOT.'/compta/bank/list.php"><strong>'.$langs->transnoentitiesnoconv("Setup").' - '.$langs->transnoentitiesnoconv("MenuBankAccounts").'</strong></a>')."\n";
|
$s = img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescBank", $step, '{s}')."\n";
|
||||||
|
$s = str_replace('{s}', '<a href="'.DOL_URL_ROOT.'/compta/bank/list.php"><strong>'.$langs->transnoentitiesnoconv("Setup").' - '.$langs->transnoentitiesnoconv("MenuBankAccounts").'</strong></a>', $s);
|
||||||
|
print $s;
|
||||||
print "<br>\n";
|
print "<br>\n";
|
||||||
|
|
||||||
$step++;
|
$step++;
|
||||||
$textlink = '<a href="'.DOL_URL_ROOT.'/admin/dict.php?id=10&from=accountancy"><strong>'.$langs->transnoentitiesnoconv("Setup").' - '.$langs->transnoentitiesnoconv("MenuVatAccounts").'</strong></a>';
|
$textlink = '<a href="'.DOL_URL_ROOT.'/admin/dict.php?id=10&from=accountancy"><strong>'.$langs->transnoentitiesnoconv("Setup").' - '.$langs->transnoentitiesnoconv("MenuVatAccounts").'</strong></a>';
|
||||||
print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescVat", $step, $textlink);
|
$s = img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescVat", $step, '{s}');
|
||||||
|
$s = str_replace('{s}', $textlink, $s);
|
||||||
|
print $s;
|
||||||
print "<br>\n";
|
print "<br>\n";
|
||||||
if (!empty($conf->tax->enabled))
|
if (!empty($conf->tax->enabled))
|
||||||
{
|
{
|
||||||
$textlink = '<a href="'.DOL_URL_ROOT.'/admin/dict.php?id=7&from=accountancy"><strong>'.$langs->transnoentitiesnoconv("Setup").' - '.$langs->transnoentitiesnoconv("MenuTaxAccounts").'</strong></a>';
|
$textlink = '<a href="'.DOL_URL_ROOT.'/admin/dict.php?id=7&from=accountancy"><strong>'.$langs->transnoentitiesnoconv("Setup").' - '.$langs->transnoentitiesnoconv("MenuTaxAccounts").'</strong></a>';
|
||||||
$step++;
|
$step++;
|
||||||
print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescContrib", $step, $textlink);
|
$s = img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescContrib", $step, '{s}');
|
||||||
|
$s = str_replace('{s}', $textlink, $s);
|
||||||
|
print $s;
|
||||||
print "<br>\n";
|
print "<br>\n";
|
||||||
}
|
}
|
||||||
/*if (! empty($conf->salaries->enabled))
|
|
||||||
{
|
|
||||||
$step++;
|
|
||||||
print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescSal", $step, '<strong>'.$langs->transnoentitiesnoconv("MenuFinancial").'-'.$langs->transnoentitiesnoconv("MenuAccountancy").' - '.$langs->transnoentitiesnoconv("MenuDefaultAccounts").'</strong>');
|
|
||||||
// htdocs/admin/salaries.php
|
|
||||||
print "<br>\n";
|
|
||||||
print "<br>\n";
|
|
||||||
}*/
|
|
||||||
if (!empty($conf->expensereport->enabled)) // TODO Move this in the default account page because this is only one accounting account per purpose, not several.
|
if (!empty($conf->expensereport->enabled)) // TODO Move this in the default account page because this is only one accounting account per purpose, not several.
|
||||||
{
|
{
|
||||||
$step++;
|
$step++;
|
||||||
print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescExpenseReport", $step, '<a href="'.DOL_URL_ROOT.'/admin/dict.php?id=17&from=accountancy"><strong>'.$langs->transnoentitiesnoconv("Setup").' - '.$langs->transnoentitiesnoconv("MenuExpenseReportAccounts").'</strong></a>');
|
$s = img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescExpenseReport", $step, '{s}');
|
||||||
|
$s = str_replace('{s}', '<a href="'.DOL_URL_ROOT.'/admin/dict.php?id=17&from=accountancy"><strong>'.$langs->transnoentitiesnoconv("Setup").' - '.$langs->transnoentitiesnoconv("MenuExpenseReportAccounts").'</strong></a>', $s);
|
||||||
|
print $s;
|
||||||
print "<br>\n";
|
print "<br>\n";
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
if (! empty($conf->loan->enabled))
|
|
||||||
{
|
|
||||||
$step++;
|
|
||||||
print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescLoan", $step, '<strong>'.$langs->transnoentitiesnoconv("MenuSpecialExpenses").' - '.$langs->transnoentitiesnoconv("Loans").'</strong> '.$langs->transnoentitiesnoconv("or").' <strong>'.$langs->transnoentitiesnoconv("MenuFinancial").'-'.$langs->transnoentitiesnoconv("Setup").' - '.$langs->transnoentitiesnoconv("MenuDefaultAccounts").'</strong>');
|
|
||||||
print "<br>\n";
|
|
||||||
}
|
|
||||||
if (! empty($conf->don->enabled))
|
|
||||||
{
|
|
||||||
$step++;
|
|
||||||
print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescDonation", $step, '<strong>'.$langs->transnoentitiesnoconv("Setup").' - '.$langs->transnoentitiesnoconv("MenuDefaultAccounts").'</strong>');
|
|
||||||
print "<br>\n";
|
|
||||||
}
|
|
||||||
if (! empty($conf->adherents->enabled))
|
|
||||||
{
|
|
||||||
$step++;
|
|
||||||
print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescSubscription", $step, '<strong>'.$langs->transnoentitiesnoconv("Setup").' - '.$langs->transnoentitiesnoconv("MenuDefaultAccounts").'</strong>');
|
|
||||||
print "<br>\n";
|
|
||||||
}*/
|
|
||||||
|
|
||||||
$step++;
|
$step++;
|
||||||
print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescProd", $step, '<a href="'.DOL_URL_ROOT.'/accountancy/admin/productaccount.php"><strong>'.$langs->transnoentitiesnoconv("Setup").' - '.$langs->transnoentitiesnoconv("ProductsBinding").'</strong></a>');
|
$s = img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescProd", $step, '{s}');
|
||||||
|
$s = str_replace('{s}', '<a href="'.DOL_URL_ROOT.'/accountancy/admin/productaccount.php"><strong>'.$langs->transnoentitiesnoconv("Setup").' - '.$langs->transnoentitiesnoconv("ProductsBinding").'</strong></a>', $s);
|
||||||
|
print $s;
|
||||||
print "<br>\n";
|
print "<br>\n";
|
||||||
|
|
||||||
|
|
||||||
@ -188,26 +179,34 @@ if ($conf->accounting->enabled)
|
|||||||
$langs->loadLangs(array('bills', 'trips'));
|
$langs->loadLangs(array('bills', 'trips'));
|
||||||
|
|
||||||
$step++;
|
$step++;
|
||||||
print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescBind", chr(64 + $step), $langs->transnoentitiesnoconv("BillsCustomers"), '<a href="'.DOL_URL_ROOT.'/accountancy/customer/index.php"><strong>'.$langs->transnoentitiesnoconv("TransferInAccounting").' - '.$langs->transnoentitiesnoconv("CustomersVentilation").'</strong></a>')."\n";
|
$s = img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescBind", chr(64 + $step), $langs->transnoentitiesnoconv("BillsCustomers"), '{s}')."\n";
|
||||||
|
$s = str_replace('{s}', '<a href="'.DOL_URL_ROOT.'/accountancy/customer/index.php"><strong>'.$langs->transnoentitiesnoconv("TransferInAccounting").' - '.$langs->transnoentitiesnoconv("CustomersVentilation").'</strong></a>', $s);
|
||||||
|
print $s;
|
||||||
print "<br>\n";
|
print "<br>\n";
|
||||||
|
|
||||||
$step++;
|
$step++;
|
||||||
print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescBind", chr(64 + $step), $langs->transnoentitiesnoconv("BillsSuppliers"), '<a href="'.DOL_URL_ROOT.'/accountancy/supplier/index.php"><strong>'.$langs->transnoentitiesnoconv("TransferInAccounting").' - '.$langs->transnoentitiesnoconv("SuppliersVentilation").'</strong></a>')."\n";
|
$s = img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescBind", chr(64 + $step), $langs->transnoentitiesnoconv("BillsSuppliers"), '{s}')."\n";
|
||||||
|
$s = str_replace('{s}', '<a href="'.DOL_URL_ROOT.'/accountancy/supplier/index.php"><strong>'.$langs->transnoentitiesnoconv("TransferInAccounting").' - '.$langs->transnoentitiesnoconv("SuppliersVentilation").'</strong></a>', $s);
|
||||||
|
print $s;
|
||||||
print "<br>\n";
|
print "<br>\n";
|
||||||
|
|
||||||
if (!empty($conf->expensereport->enabled) || !empty($conf->deplacement->enabled))
|
if (!empty($conf->expensereport->enabled) || !empty($conf->deplacement->enabled))
|
||||||
{
|
{
|
||||||
$step++;
|
$step++;
|
||||||
print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescBind", chr(64 + $step), $langs->transnoentitiesnoconv("ExpenseReports"), '<a href="'.DOL_URL_ROOT.'/accountancy/expensereport/index.php"><strong>'.$langs->transnoentitiesnoconv("TransferInAccounting").' - '.$langs->transnoentitiesnoconv("ExpenseReportsVentilation").'</strong></a>')."\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);
|
||||||
|
print $s;
|
||||||
print "<br>\n";
|
print "<br>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
$step++;
|
$step++;
|
||||||
print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescWriteRecords", chr(64 + $step), $langs->transnoentitiesnoconv("TransferInAccounting").' - '.$langs->transnoentitiesnoconv("RegistrationInAccounting"), $langs->transnoentitiesnoconv("WriteBookKeeping"))."\n";
|
$s = img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescWriteRecords", chr(64 + $step), $langs->transnoentitiesnoconv("TransferInAccounting").' - '.$langs->transnoentitiesnoconv("RegistrationInAccounting"), $langs->transnoentitiesnoconv("WriteBookKeeping"))."\n";
|
||||||
|
print $s;
|
||||||
print "<br>\n";
|
print "<br>\n";
|
||||||
|
|
||||||
$step++;
|
$step++;
|
||||||
print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescAnalyze", chr(64 + $step))."<br>\n";
|
$s = img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescAnalyze", chr(64 + $step))."<br>\n";
|
||||||
|
print $s;
|
||||||
print "<br>\n";
|
print "<br>\n";
|
||||||
|
|
||||||
print '<br>';
|
print '<br>';
|
||||||
|
|||||||
@ -7,7 +7,7 @@
|
|||||||
* Copyright (C) 2013-2019 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
* Copyright (C) 2013-2019 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||||
* Copyright (C) 2013-2014 Florian Henry <florian.henry@open-concept.pro>
|
* Copyright (C) 2013-2014 Florian Henry <florian.henry@open-concept.pro>
|
||||||
* Copyright (C) 2013-2014 Olivier Geffroy <jeff@jeffinfo.com>
|
* Copyright (C) 2013-2014 Olivier Geffroy <jeff@jeffinfo.com>
|
||||||
* Copyright (C) 2017-2018 Frédéric France <frederic.france@netlogic.fr>
|
* Copyright (C) 2017-2020 Frédéric France <frederic.france@netlogic.fr>
|
||||||
* Copyright (C) 2018 Ferran Marcet <fmarcet@2byte.es>
|
* Copyright (C) 2018 Ferran Marcet <fmarcet@2byte.es>
|
||||||
* Copyright (C) 2018 Eric Seigne <eric.seigne@cap-rel.fr>
|
* Copyright (C) 2018 Eric Seigne <eric.seigne@cap-rel.fr>
|
||||||
*
|
*
|
||||||
@ -73,15 +73,18 @@ $date_endmonth = GETPOST('date_endmonth', 'int');
|
|||||||
$date_endday = GETPOST('date_endday', 'int');
|
$date_endday = GETPOST('date_endday', 'int');
|
||||||
$date_endyear = GETPOST('date_endyear', 'int');
|
$date_endyear = GETPOST('date_endyear', 'int');
|
||||||
$in_bookkeeping = GETPOST('in_bookkeeping', 'aZ09');
|
$in_bookkeeping = GETPOST('in_bookkeeping', 'aZ09');
|
||||||
if ($in_bookkeeping == '') $in_bookkeeping = 'notyet';
|
if ($in_bookkeeping == '') {
|
||||||
|
$in_bookkeeping = 'notyet';
|
||||||
|
}
|
||||||
|
|
||||||
$now = dol_now();
|
$now = dol_now();
|
||||||
|
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
|
|
||||||
// Security check
|
// Security check
|
||||||
if ($user->socid > 0 && empty($id_journal))
|
if ($user->socid > 0 && empty($id_journal)) {
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -93,8 +96,7 @@ $error = 0;
|
|||||||
$date_start = dol_mktime(0, 0, 0, $date_startmonth, $date_startday, $date_startyear);
|
$date_start = dol_mktime(0, 0, 0, $date_startmonth, $date_startday, $date_startyear);
|
||||||
$date_end = dol_mktime(23, 59, 59, $date_endmonth, $date_endday, $date_endyear);
|
$date_end = dol_mktime(23, 59, 59, $date_endmonth, $date_endday, $date_endyear);
|
||||||
|
|
||||||
if (empty($date_startmonth) || empty($date_endmonth))
|
if (empty($date_startmonth) || empty($date_endmonth)) {
|
||||||
{
|
|
||||||
// Period by default on transfer
|
// Period by default on transfer
|
||||||
$dates = getDefaultDatesForTransfer();
|
$dates = getDefaultDatesForTransfer();
|
||||||
$date_start = $dates['date_start'];
|
$date_start = $dates['date_start'];
|
||||||
@ -103,8 +105,7 @@ if (empty($date_startmonth) || empty($date_endmonth))
|
|||||||
$pastmonth = $dates['pastmonth'];
|
$pastmonth = $dates['pastmonth'];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!GETPOSTISSET('date_startmonth') && (empty($date_start) || empty($date_end))) // We define date_start and date_end, only if we did not submit the form
|
if (!GETPOSTISSET('date_startmonth') && (empty($date_start) || empty($date_end))) { // We define date_start and date_end, only if we did not submit the form
|
||||||
{
|
|
||||||
$date_start = dol_get_first_day($pastmonthyear, $pastmonth, false);
|
$date_start = dol_get_first_day($pastmonthyear, $pastmonth, false);
|
||||||
$date_end = dol_get_last_day($pastmonthyear, $pastmonth, false);
|
$date_end = dol_get_last_day($pastmonthyear, $pastmonth, false);
|
||||||
}
|
}
|
||||||
@ -124,19 +125,18 @@ $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as soc on bu1.url_id=soc.rowid";
|
|||||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user as u on bu2.url_id=u.rowid";
|
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user as u on bu2.url_id=u.rowid";
|
||||||
$sql .= " WHERE ba.fk_accountancy_journal=".$id_journal;
|
$sql .= " WHERE ba.fk_accountancy_journal=".$id_journal;
|
||||||
$sql .= ' AND b.amount != 0 AND ba.entity IN ('.getEntity('bank_account', 0).')'; // We don't share object for accountancy
|
$sql .= ' AND b.amount != 0 AND ba.entity IN ('.getEntity('bank_account', 0).')'; // We don't share object for accountancy
|
||||||
if ($date_start && $date_end)
|
if ($date_start && $date_end) {
|
||||||
$sql .= " AND b.dateo >= '".$db->idate($date_start)."' AND b.dateo <= '".$db->idate($date_end)."'";
|
$sql .= " AND b.dateo >= '".$db->idate($date_start)."' AND b.dateo <= '".$db->idate($date_end)."'";
|
||||||
|
}
|
||||||
// Define begin binding date
|
// Define begin binding date
|
||||||
if (!empty($conf->global->ACCOUNTING_DATE_START_BINDING)) {
|
if (!empty($conf->global->ACCOUNTING_DATE_START_BINDING)) {
|
||||||
$sql .= " AND b.dateo >= '".$db->idate($conf->global->ACCOUNTING_DATE_START_BINDING)."'";
|
$sql .= " AND b.dateo >= '".$db->idate($conf->global->ACCOUNTING_DATE_START_BINDING)."'";
|
||||||
}
|
}
|
||||||
// Already in bookkeeping or not
|
// Already in bookkeeping or not
|
||||||
if ($in_bookkeeping == 'already')
|
if ($in_bookkeeping == 'already') {
|
||||||
{
|
|
||||||
$sql .= " AND (b.rowid IN (SELECT fk_doc FROM ".MAIN_DB_PREFIX."accounting_bookkeeping as ab WHERE ab.doc_type='bank') )";
|
$sql .= " AND (b.rowid IN (SELECT fk_doc FROM ".MAIN_DB_PREFIX."accounting_bookkeeping as ab WHERE ab.doc_type='bank') )";
|
||||||
}
|
}
|
||||||
if ($in_bookkeeping == 'notyet')
|
if ($in_bookkeeping == 'notyet') {
|
||||||
{
|
|
||||||
$sql .= " AND (b.rowid NOT IN (SELECT fk_doc FROM ".MAIN_DB_PREFIX."accounting_bookkeeping as ab WHERE ab.doc_type='bank') )";
|
$sql .= " AND (b.rowid NOT IN (SELECT fk_doc FROM ".MAIN_DB_PREFIX."accounting_bookkeeping as ab WHERE ab.doc_type='bank') )";
|
||||||
}
|
}
|
||||||
$sql .= " ORDER BY b.datev";
|
$sql .= " ORDER BY b.datev";
|
||||||
@ -177,9 +177,9 @@ if ($result) {
|
|||||||
//print $sql;
|
//print $sql;
|
||||||
|
|
||||||
// Variables
|
// Variables
|
||||||
$account_supplier = (($conf->global->ACCOUNTING_ACCOUNT_SUPPLIER != "") ? $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER : 'NotDefined'); // NotDefined is a reserved word
|
$account_supplier = (($conf->global->ACCOUNTING_ACCOUNT_SUPPLIER != "") ? $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER : 'NotDefined'); // NotDefined is a reserved word
|
||||||
$account_customer = (($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER != "") ? $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER : 'NotDefined'); // NotDefined is a reserved word
|
$account_customer = (($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER != "") ? $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER : 'NotDefined'); // NotDefined is a reserved word
|
||||||
$account_employee = (!empty($conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT) ? $conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT : 'NotDefined'); // NotDefined is a reserved word
|
$account_employee = (!empty($conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT) ? $conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT : 'NotDefined'); // NotDefined is a reserved word
|
||||||
$account_pay_vat = (!empty($conf->global->ACCOUNTING_VAT_PAY_ACCOUNT) ? $conf->global->ACCOUNTING_VAT_PAY_ACCOUNT : 'NotDefined'); // NotDefined is a reserved word
|
$account_pay_vat = (!empty($conf->global->ACCOUNTING_VAT_PAY_ACCOUNT) ? $conf->global->ACCOUNTING_VAT_PAY_ACCOUNT : 'NotDefined'); // NotDefined is a reserved word
|
||||||
$account_pay_donation = (!empty($conf->global->DONATION_ACCOUNTINGACCOUNT) ? $conf->global->DONATION_ACCOUNTINGACCOUNT : 'NotDefined'); // NotDefined is a reserved word
|
$account_pay_donation = (!empty($conf->global->DONATION_ACCOUNTINGACCOUNT) ? $conf->global->DONATION_ACCOUNTINGACCOUNT : 'NotDefined'); // NotDefined is a reserved word
|
||||||
$account_pay_subscription = (!empty($conf->global->ADHERENT_SUBSCRIPTION_ACCOUNTINGACCOUNT) ? $conf->global->ADHERENT_SUBSCRIPTION_ACCOUNTINGACCOUNT : 'NotDefined'); // NotDefined is a reserved word
|
$account_pay_subscription = (!empty($conf->global->ADHERENT_SUBSCRIPTION_ACCOUNTINGACCOUNT) ? $conf->global->ADHERENT_SUBSCRIPTION_ACCOUNTINGACCOUNT : 'NotDefined'); // NotDefined is a reserved word
|
||||||
@ -198,23 +198,28 @@ if ($result) {
|
|||||||
// one line for bank record = tabbq
|
// one line for bank record = tabbq
|
||||||
// one line for thirdparty record = tabtp
|
// one line for thirdparty record = tabtp
|
||||||
$i = 0;
|
$i = 0;
|
||||||
while ($i < $num)
|
while ($i < $num) {
|
||||||
{
|
|
||||||
$obj = $db->fetch_object($result);
|
$obj = $db->fetch_object($result);
|
||||||
|
|
||||||
$lineisapurchase = -1;
|
$lineisapurchase = -1;
|
||||||
$lineisasale = -1;
|
$lineisasale = -1;
|
||||||
// Old method to detect if it's a sale or purchase
|
// Old method to detect if it's a sale or purchase
|
||||||
if ($obj->label == '(SupplierInvoicePayment)' || $obj->label == '(SupplierInvoicePaymentBack)') $lineisapurchase = 1;
|
if ($obj->label == '(SupplierInvoicePayment)' || $obj->label == '(SupplierInvoicePaymentBack)') {
|
||||||
if ($obj->label == '(CustomerInvoicePayment)' || $obj->label == '(CustomerInvoicePaymentBack)') $lineisasale = 1;
|
$lineisapurchase = 1;
|
||||||
// Try a more reliable method to detect if record is a supplier payment or a customer payment
|
|
||||||
if ($lineisapurchase < 0)
|
|
||||||
{
|
|
||||||
if ($obj->typeop_payment_supplier == 'payment_supplier') $lineisapurchase = 1;
|
|
||||||
}
|
}
|
||||||
if ($lineisasale < 0)
|
if ($obj->label == '(CustomerInvoicePayment)' || $obj->label == '(CustomerInvoicePaymentBack)') {
|
||||||
{
|
$lineisasale = 1;
|
||||||
if ($obj->typeop_payment == 'payment') $lineisasale = 1;
|
}
|
||||||
|
// Try a more reliable method to detect if record is a supplier payment or a customer payment
|
||||||
|
if ($lineisapurchase < 0) {
|
||||||
|
if ($obj->typeop_payment_supplier == 'payment_supplier') {
|
||||||
|
$lineisapurchase = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($lineisasale < 0) {
|
||||||
|
if ($obj->typeop_payment == 'payment') {
|
||||||
|
$lineisasale = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//var_dump($obj->type_payment); var_dump($obj->type_payment_supplier);
|
//var_dump($obj->type_payment); var_dump($obj->type_payment_supplier);
|
||||||
//var_dump($lineisapurchase); //var_dump($lineisasale);
|
//var_dump($lineisapurchase); //var_dump($lineisasale);
|
||||||
@ -224,28 +229,30 @@ if ($result) {
|
|||||||
|
|
||||||
// Set accountancy code for thirdparty (example: '411CU...' or '411' if no subledger account defined on customer)
|
// Set accountancy code for thirdparty (example: '411CU...' or '411' if no subledger account defined on customer)
|
||||||
$compta_soc = 'NotDefined';
|
$compta_soc = 'NotDefined';
|
||||||
if ($lineisapurchase > 0)
|
if ($lineisapurchase > 0) {
|
||||||
$compta_soc = (($obj->code_compta_fournisseur != "") ? $obj->code_compta_fournisseur : $account_supplier);
|
$compta_soc = (($obj->code_compta_fournisseur != "") ? $obj->code_compta_fournisseur : $account_supplier);
|
||||||
if ($lineisasale > 0)
|
}
|
||||||
|
if ($lineisasale > 0) {
|
||||||
$compta_soc = (!empty($obj->code_compta) ? $obj->code_compta : $account_customer);
|
$compta_soc = (!empty($obj->code_compta) ? $obj->code_compta : $account_customer);
|
||||||
|
}
|
||||||
|
|
||||||
$tabcompany[$obj->rowid] = array(
|
$tabcompany[$obj->rowid] = array(
|
||||||
'id' => $obj->socid,
|
'id' => $obj->socid,
|
||||||
'name' => $obj->name,
|
'name' => $obj->name,
|
||||||
'code_compta' => $compta_soc,
|
'code_compta' => $compta_soc,
|
||||||
'email' => $obj->email
|
'email' => $obj->email
|
||||||
);
|
);
|
||||||
|
|
||||||
// Set accountancy code for user
|
// Set accountancy code for user
|
||||||
$compta_user = (!empty($obj->accountancy_code) ? $obj->accountancy_code : '');
|
$compta_user = (!empty($obj->accountancy_code) ? $obj->accountancy_code : '');
|
||||||
|
|
||||||
$tabuser[$obj->rowid] = array(
|
$tabuser[$obj->rowid] = array(
|
||||||
'id' => $obj->userid,
|
'id' => $obj->userid,
|
||||||
'name' => dolGetFirstLastname($obj->firstname, $obj->lastname),
|
'name' => dolGetFirstLastname($obj->firstname, $obj->lastname),
|
||||||
'lastname' => $obj->lastname,
|
'lastname' => $obj->lastname,
|
||||||
'firstname' => $obj->firstname,
|
'firstname' => $obj->firstname,
|
||||||
'email' => $obj->useremail,
|
'email' => $obj->useremail,
|
||||||
'accountancy_code' => $compta_user
|
'accountancy_code' => $compta_user
|
||||||
);
|
);
|
||||||
|
|
||||||
// Variable bookkeeping ($obj->rowid is Bank Id)
|
// Variable bookkeeping ($obj->rowid is Bank Id)
|
||||||
@ -264,10 +271,6 @@ if ($result) {
|
|||||||
// Load of url links to the line into llx_bank
|
// Load of url links to the line into llx_bank
|
||||||
$links = $object->get_url($obj->rowid); // Get an array('url'=>, 'url_id'=>, 'label'=>, 'type'=> 'fk_bank'=> )
|
$links = $object->get_url($obj->rowid); // Get an array('url'=>, 'url_id'=>, 'label'=>, 'type'=> 'fk_bank'=> )
|
||||||
|
|
||||||
//var_dump($i);
|
|
||||||
//var_dump($tabpay);
|
|
||||||
//var_dump($tabcompany);
|
|
||||||
|
|
||||||
// By default
|
// By default
|
||||||
$tabpay[$obj->rowid]['type'] = 'unknown'; // Can be SOLD, miscellaneous entry, payment of patient, or any old record with no links in bank_url.
|
$tabpay[$obj->rowid]['type'] = 'unknown'; // Can be SOLD, miscellaneous entry, payment of patient, or any old record with no links in bank_url.
|
||||||
$tabtype[$obj->rowid] = 'unknown';
|
$tabtype[$obj->rowid] = 'unknown';
|
||||||
@ -277,17 +280,14 @@ if ($result) {
|
|||||||
if (is_array($links) && count($links) > 0) {
|
if (is_array($links) && count($links) > 0) {
|
||||||
// Now loop on each link of record in bank.
|
// Now loop on each link of record in bank.
|
||||||
foreach ($links as $key => $val) {
|
foreach ($links as $key => $val) {
|
||||||
if (in_array($links[$key]['type'], array('sc', 'payment_sc', 'payment', 'payment_supplier', 'payment_vat', 'payment_expensereport', 'banktransfert', 'payment_donation', 'member', 'payment_loan', 'payment_salary', 'payment_various')))
|
if (in_array($links[$key]['type'], array('sc', 'payment_sc', 'payment', 'payment_supplier', 'payment_vat', 'payment_expensereport', 'banktransfert', 'payment_donation', 'member', 'payment_loan', 'payment_salary', 'payment_various'))) {
|
||||||
{
|
|
||||||
// So we excluded 'company' and 'user' here. We want only payment lines
|
// So we excluded 'company' and 'user' here. We want only payment lines
|
||||||
|
|
||||||
// We save tabtype for a future use, to remember what kind of payment it is
|
// We save tabtype for a future use, to remember what kind of payment it is
|
||||||
$tabpay[$obj->rowid]['type'] = $links[$key]['type'];
|
$tabpay[$obj->rowid]['type'] = $links[$key]['type'];
|
||||||
$tabtype[$obj->rowid] = $links[$key]['type'];
|
$tabtype[$obj->rowid] = $links[$key]['type'];
|
||||||
} elseif (in_array($links[$key]['type'], array('company', 'user')))
|
} elseif (in_array($links[$key]['type'], array('company', 'user'))) {
|
||||||
{
|
if ($tabpay[$obj->rowid]['type'] == 'unknown') {
|
||||||
if ($tabpay[$obj->rowid]['type'] == 'unknown')
|
|
||||||
{
|
|
||||||
// We can guess here it is a bank record for a thirdparty company or a user.
|
// We can guess here it is a bank record for a thirdparty company or a user.
|
||||||
// But we won't be able to record somewhere else than into a waiting account, because there is no other journal to record the contreparty.
|
// But we won't be able to record somewhere else than into a waiting account, because there is no other journal to record the contreparty.
|
||||||
}
|
}
|
||||||
@ -312,16 +312,23 @@ if ($result) {
|
|||||||
$societestatic->name = $links[$key]['label'];
|
$societestatic->name = $links[$key]['label'];
|
||||||
$societestatic->email = $tabcompany[$obj->rowid]['email'];
|
$societestatic->email = $tabcompany[$obj->rowid]['email'];
|
||||||
$tabpay[$obj->rowid]["soclib"] = $societestatic->getNomUrl(1, '', 30);
|
$tabpay[$obj->rowid]["soclib"] = $societestatic->getNomUrl(1, '', 30);
|
||||||
if ($compta_soc) $tabtp[$obj->rowid][$compta_soc] += $obj->amount;
|
if ($compta_soc) {
|
||||||
|
$tabtp[$obj->rowid][$compta_soc] += $obj->amount;
|
||||||
|
}
|
||||||
} elseif ($links[$key]['type'] == 'user') {
|
} elseif ($links[$key]['type'] == 'user') {
|
||||||
$userstatic->id = $links[$key]['url_id'];
|
$userstatic->id = $links[$key]['url_id'];
|
||||||
$userstatic->name = $links[$key]['label'];
|
$userstatic->name = $links[$key]['label'];
|
||||||
$userstatic->email = $tabuser[$obj->rowid]['email'];
|
$userstatic->email = $tabuser[$obj->rowid]['email'];
|
||||||
$userstatic->firstname = $tabuser[$obj->rowid]['firstname'];
|
$userstatic->firstname = $tabuser[$obj->rowid]['firstname'];
|
||||||
$userstatic->lastname = $tabuser[$obj->rowid]['lastname'];
|
$userstatic->lastname = $tabuser[$obj->rowid]['lastname'];
|
||||||
if ($userstatic->id > 0) $tabpay[$obj->rowid]["soclib"] = $userstatic->getNomUrl(1, '', 30);
|
if ($userstatic->id > 0) {
|
||||||
else $tabpay[$obj->rowid]["soclib"] = '???'; // Should not happen, but happens with old data when id of user was not saved on expense report payment.
|
$tabpay[$obj->rowid]["soclib"] = $userstatic->getNomUrl(1, '', 30);
|
||||||
if ($compta_user) $tabtp[$obj->rowid][$compta_user] += $obj->amount;
|
} else {
|
||||||
|
$tabpay[$obj->rowid]["soclib"] = '???'; // Should not happen, but happens with old data when id of user was not saved on expense report payment.
|
||||||
|
}
|
||||||
|
if ($compta_user) {
|
||||||
|
$tabtp[$obj->rowid][$compta_user] += $obj->amount;
|
||||||
|
}
|
||||||
} elseif ($links[$key]['type'] == 'sc') {
|
} elseif ($links[$key]['type'] == 'sc') {
|
||||||
$chargestatic->id = $links[$key]['url_id'];
|
$chargestatic->id = $links[$key]['url_id'];
|
||||||
$chargestatic->ref = $links[$key]['url_id'];
|
$chargestatic->ref = $links[$key]['url_id'];
|
||||||
@ -329,8 +336,9 @@ if ($result) {
|
|||||||
$tabpay[$obj->rowid]["lib"] .= ' '.$chargestatic->getNomUrl(2);
|
$tabpay[$obj->rowid]["lib"] .= ' '.$chargestatic->getNomUrl(2);
|
||||||
$reg = array();
|
$reg = array();
|
||||||
if (preg_match('/^\((.*)\)$/i', $links[$key]['label'], $reg)) {
|
if (preg_match('/^\((.*)\)$/i', $links[$key]['label'], $reg)) {
|
||||||
if ($reg[1] == 'socialcontribution')
|
if ($reg[1] == 'socialcontribution') {
|
||||||
$reg[1] = 'SocialContribution';
|
$reg[1] = 'SocialContribution';
|
||||||
|
}
|
||||||
$chargestatic->label = $langs->trans($reg[1]);
|
$chargestatic->label = $langs->trans($reg[1]);
|
||||||
} else {
|
} else {
|
||||||
$chargestatic->label = $links[$key]['label'];
|
$chargestatic->label = $links[$key]['label'];
|
||||||
@ -430,20 +438,19 @@ if ($result) {
|
|||||||
|
|
||||||
// If no links were found to know the amount on thirdparty, we try to guess it.
|
// If no links were found to know the amount on thirdparty, we try to guess it.
|
||||||
// This may happens on bank entries without the links lines to 'company'.
|
// This may happens on bank entries without the links lines to 'company'.
|
||||||
if (empty($tabtp[$obj->rowid]) && !empty($tabmoreinfo[$obj->rowid]['withdraw'])) // If we dont find 'company' link because it is an old 'withdraw' record
|
if (empty($tabtp[$obj->rowid]) && !empty($tabmoreinfo[$obj->rowid]['withdraw'])) { // If we dont find 'company' link because it is an old 'withdraw' record
|
||||||
{
|
|
||||||
foreach ($links as $key => $val) {
|
foreach ($links as $key => $val) {
|
||||||
if ($links[$key]['type'] == 'payment') {
|
if ($links[$key]['type'] == 'payment') {
|
||||||
// Get thirdparty
|
// Get thirdparty
|
||||||
$tmppayment->fetch($links[$key]['url_id']);
|
$tmppayment->fetch($links[$key]['url_id']);
|
||||||
$arrayofamounts = $tmppayment->getAmountsArray();
|
$arrayofamounts = $tmppayment->getAmountsArray();
|
||||||
foreach ($arrayofamounts as $invoiceid => $amount)
|
if (is_array($arrayofamounts)) {
|
||||||
{
|
foreach ($arrayofamounts as $invoiceid => $amount) {
|
||||||
$tmpinvoice->fetch($invoiceid);
|
$tmpinvoice->fetch($invoiceid);
|
||||||
$tmpinvoice->fetch_thirdparty();
|
$tmpinvoice->fetch_thirdparty();
|
||||||
if ($tmpinvoice->thirdparty->code_compta)
|
if ($tmpinvoice->thirdparty->code_compta) {
|
||||||
{
|
$tabtp[$obj->rowid][$tmpinvoice->thirdparty->code_compta] += $amount;
|
||||||
$tabtp[$obj->rowid][$tmpinvoice->thirdparty->code_compta] += $amount;
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -451,7 +458,9 @@ if ($result) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If no links were found to know the amount on thirdparty, we init it to account 'NotDefined'.
|
// If no links were found to know the amount on thirdparty, we init it to account 'NotDefined'.
|
||||||
if (empty($tabtp[$obj->rowid])) $tabtp[$obj->rowid]['NotDefined'] = $tabbq[$obj->rowid][$compta_bank];
|
if (empty($tabtp[$obj->rowid])) {
|
||||||
|
$tabtp[$obj->rowid]['NotDefined'] = $tabbq[$obj->rowid][$compta_bank];
|
||||||
|
}
|
||||||
|
|
||||||
// Check account number is ok
|
// Check account number is ok
|
||||||
/*if ($action == 'writebookkeeping') // Make test now in such a case
|
/*if ($action == 'writebookkeeping') // Make test now in such a case
|
||||||
@ -492,8 +501,7 @@ if (!$error && $action == 'writebookkeeping') {
|
|||||||
$now = dol_now();
|
$now = dol_now();
|
||||||
|
|
||||||
$error = 0;
|
$error = 0;
|
||||||
foreach ($tabpay as $key => $val) // $key is rowid into llx_bank
|
foreach ($tabpay as $key => $val) { // $key is rowid into llx_bank
|
||||||
{
|
|
||||||
$date = dol_print_date($db->jdate($val["date"]), 'day');
|
$date = dol_print_date($db->jdate($val["date"]), 'day');
|
||||||
|
|
||||||
$ref = getSourceDocRef($val, $tabtype[$key]);
|
$ref = getSourceDocRef($val, $tabtype[$key]);
|
||||||
@ -511,17 +519,18 @@ if (!$error && $action == 'writebookkeeping') {
|
|||||||
var_dump($tabbq);exit;*/
|
var_dump($tabbq);exit;*/
|
||||||
|
|
||||||
// Bank
|
// Bank
|
||||||
if (!$errorforline && is_array($tabbq[$key]))
|
if (!$errorforline && is_array($tabbq[$key])) {
|
||||||
{
|
|
||||||
// Line into bank account
|
// Line into bank account
|
||||||
foreach ($tabbq[$key] as $k => $mt)
|
foreach ($tabbq[$key] as $k => $mt) {
|
||||||
{
|
if ($mt) {
|
||||||
if ($mt)
|
|
||||||
{
|
|
||||||
$reflabel = '';
|
$reflabel = '';
|
||||||
if (!empty($val['lib'])) $reflabel .= dol_string_nohtmltag($val['lib'])." - ";
|
if (!empty($val['lib'])) {
|
||||||
|
$reflabel .= dol_string_nohtmltag($val['lib'])." - ";
|
||||||
|
}
|
||||||
$reflabel .= $langs->trans("Bank").' '.dol_string_nohtmltag($val['bank_account_ref']);
|
$reflabel .= $langs->trans("Bank").' '.dol_string_nohtmltag($val['bank_account_ref']);
|
||||||
if (!empty($val['soclib'])) $reflabel .= " - ".dol_string_nohtmltag($val['soclib']);
|
if (!empty($val['soclib'])) {
|
||||||
|
$reflabel .= " - ".dol_string_nohtmltag($val['soclib']);
|
||||||
|
}
|
||||||
|
|
||||||
$bookkeeping = new BookKeeping($db);
|
$bookkeeping = new BookKeeping($db);
|
||||||
$bookkeeping->doc_date = $val["date"];
|
$bookkeeping->doc_date = $val["date"];
|
||||||
@ -554,8 +563,7 @@ if (!$error && $action == 'writebookkeeping') {
|
|||||||
|
|
||||||
$result = $bookkeeping->create($user);
|
$result = $bookkeeping->create($user);
|
||||||
if ($result < 0) {
|
if ($result < 0) {
|
||||||
if ($bookkeeping->error == 'BookkeepingRecordAlreadyExists') // Already exists
|
if ($bookkeeping->error == 'BookkeepingRecordAlreadyExists') { // Already exists
|
||||||
{
|
|
||||||
$error++;
|
$error++;
|
||||||
$errorforline++;
|
$errorforline++;
|
||||||
setEventMessages('Transaction for ('.$bookkeeping->doc_type.', '.$bookkeeping->fk_doc.', '.$bookkeeping->fk_docdet.') were already recorded', null, 'warnings');
|
setEventMessages('Transaction for ('.$bookkeeping->doc_type.', '.$bookkeeping->fk_doc.', '.$bookkeeping->fk_docdet.') were already recorded', null, 'warnings');
|
||||||
@ -570,18 +578,16 @@ if (!$error && $action == 'writebookkeeping') {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Third party
|
// Third party
|
||||||
if (!$errorforline)
|
if (!$errorforline) {
|
||||||
{
|
if (is_array($tabtp[$key])) {
|
||||||
if (is_array($tabtp[$key]))
|
|
||||||
{
|
|
||||||
// Line into thirdparty account
|
// Line into thirdparty account
|
||||||
foreach ($tabtp[$key] as $k => $mt) {
|
foreach ($tabtp[$key] as $k => $mt) {
|
||||||
if ($mt)
|
if ($mt) {
|
||||||
{
|
|
||||||
$reflabel = '';
|
$reflabel = '';
|
||||||
if (!empty($val['lib'])) $reflabel .= dol_string_nohtmltag($val['lib']).($val['soclib'] ? " - " : "");
|
if (!empty($val['lib'])) {
|
||||||
if ($tabtype[$key] == 'banktransfert')
|
$reflabel .= dol_string_nohtmltag($val['lib']).($val['soclib'] ? " - " : "");
|
||||||
{
|
}
|
||||||
|
if ($tabtype[$key] == 'banktransfert') {
|
||||||
$reflabel .= dol_string_nohtmltag($langs->transnoentitiesnoconv('TransitionalAccount').' '.$account_transfer);
|
$reflabel .= dol_string_nohtmltag($langs->transnoentitiesnoconv('TransitionalAccount').' '.$account_transfer);
|
||||||
} else {
|
} else {
|
||||||
$reflabel .= dol_string_nohtmltag($val['soclib']);
|
$reflabel .= dol_string_nohtmltag($val['soclib']);
|
||||||
@ -681,8 +687,7 @@ if (!$error && $action == 'writebookkeeping') {
|
|||||||
$accountingaccount->fetch(null, $k, true);
|
$accountingaccount->fetch(null, $k, true);
|
||||||
$bookkeeping->label_compte = $accountingaccount->label;
|
$bookkeeping->label_compte = $accountingaccount->label;
|
||||||
} else {
|
} else {
|
||||||
if ($tabtype[$key] == 'unknown') // Unknown transaction, we will use a waiting account for thirdparty.
|
if ($tabtype[$key] == 'unknown') { // Unknown transaction, we will use a waiting account for thirdparty.
|
||||||
{
|
|
||||||
// Temporary account
|
// Temporary account
|
||||||
$bookkeeping->subledger_account = '';
|
$bookkeeping->subledger_account = '';
|
||||||
$bookkeeping->subledger_label = '';
|
$bookkeeping->subledger_label = '';
|
||||||
@ -700,8 +705,7 @@ if (!$error && $action == 'writebookkeeping') {
|
|||||||
|
|
||||||
$result = $bookkeeping->create($user);
|
$result = $bookkeeping->create($user);
|
||||||
if ($result < 0) {
|
if ($result < 0) {
|
||||||
if ($bookkeeping->error == 'BookkeepingRecordAlreadyExists') // Already exists
|
if ($bookkeeping->error == 'BookkeepingRecordAlreadyExists') { // Already exists
|
||||||
{
|
|
||||||
$error++;
|
$error++;
|
||||||
$errorforline++;
|
$errorforline++;
|
||||||
setEventMessages('Transaction for ('.$bookkeeping->doc_type.', '.$bookkeeping->fk_doc.', '.$bookkeeping->fk_docdet.') were already recorded', null, 'warnings');
|
setEventMessages('Transaction for ('.$bookkeeping->doc_type.', '.$bookkeeping->fk_doc.', '.$bookkeeping->fk_docdet.') were already recorded', null, 'warnings');
|
||||||
@ -715,10 +719,11 @@ if (!$error && $action == 'writebookkeeping') {
|
|||||||
}
|
}
|
||||||
} else { // If thirdparty unknown, output the waiting account
|
} else { // If thirdparty unknown, output the waiting account
|
||||||
foreach ($tabbq[$key] as $k => $mt) {
|
foreach ($tabbq[$key] as $k => $mt) {
|
||||||
if ($mt)
|
if ($mt) {
|
||||||
{
|
|
||||||
$reflabel = '';
|
$reflabel = '';
|
||||||
if (!empty($val['lib'])) $reflabel .= dol_string_nohtmltag($val['lib'])." - ";
|
if (!empty($val['lib'])) {
|
||||||
|
$reflabel .= dol_string_nohtmltag($val['lib'])." - ";
|
||||||
|
}
|
||||||
$reflabel .= dol_string_nohtmltag('WaitingAccount');
|
$reflabel .= dol_string_nohtmltag('WaitingAccount');
|
||||||
|
|
||||||
$bookkeeping = new BookKeeping($db);
|
$bookkeeping = new BookKeeping($db);
|
||||||
@ -745,8 +750,7 @@ if (!$error && $action == 'writebookkeeping') {
|
|||||||
$result = $bookkeeping->create($user);
|
$result = $bookkeeping->create($user);
|
||||||
|
|
||||||
if ($result < 0) {
|
if ($result < 0) {
|
||||||
if ($bookkeeping->error == 'BookkeepingRecordAlreadyExists') // Already exists
|
if ($bookkeeping->error == 'BookkeepingRecordAlreadyExists') { // Already exists
|
||||||
{
|
|
||||||
$error++;
|
$error++;
|
||||||
$errorforline++;
|
$errorforline++;
|
||||||
setEventMessages('Transaction for ('.$bookkeeping->doc_type.', '.$bookkeeping->fk_doc.', '.$bookkeeping->fk_docdet.') were already recorded', null, 'warnings');
|
setEventMessages('Transaction for ('.$bookkeeping->doc_type.', '.$bookkeeping->fk_doc.', '.$bookkeeping->fk_docdet.') were already recorded', null, 'warnings');
|
||||||
@ -761,23 +765,20 @@ if (!$error && $action == 'writebookkeeping') {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (price2num($totaldebit, 'MT') != price2num($totalcredit, 'MT'))
|
if (price2num($totaldebit, 'MT') != price2num($totalcredit, 'MT')) {
|
||||||
{
|
|
||||||
$error++;
|
$error++;
|
||||||
$errorforline++;
|
$errorforline++;
|
||||||
setEventMessages('Try to insert a non balanced transaction in book for '.$ref.'. Canceled. Surely a bug.', null, 'errors');
|
setEventMessages('Try to insert a non balanced transaction in book for '.$ref.'. Canceled. Surely a bug.', null, 'errors');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$errorforline)
|
if (!$errorforline) {
|
||||||
{
|
|
||||||
$db->commit();
|
$db->commit();
|
||||||
} else {
|
} else {
|
||||||
//print 'KO for line '.$key.' '.$error.'<br>';
|
//print 'KO for line '.$key.' '.$error.'<br>';
|
||||||
$db->rollback();
|
$db->rollback();
|
||||||
|
|
||||||
$MAXNBERRORS = 5;
|
$MAXNBERRORS = 5;
|
||||||
if ($error >= $MAXNBERRORS)
|
if ($error >= $MAXNBERRORS) {
|
||||||
{
|
|
||||||
setEventMessages($langs->trans("ErrorTooManyErrorsProcessStopped").' (>'.$MAXNBERRORS.')', null, 'errors');
|
setEventMessages($langs->trans("ErrorTooManyErrorsProcessStopped").' (>'.$MAXNBERRORS.')', null, 'errors');
|
||||||
break; // Break in the foreach
|
break; // Break in the foreach
|
||||||
}
|
}
|
||||||
@ -786,8 +787,7 @@ if (!$error && $action == 'writebookkeeping') {
|
|||||||
|
|
||||||
if (empty($error) && count($tabpay) > 0) {
|
if (empty($error) && count($tabpay) > 0) {
|
||||||
setEventMessages($langs->trans("GeneralLedgerIsWritten"), null, 'mesgs');
|
setEventMessages($langs->trans("GeneralLedgerIsWritten"), null, 'mesgs');
|
||||||
} elseif (count($tabpay) == $error)
|
} elseif (count($tabpay) == $error) {
|
||||||
{
|
|
||||||
setEventMessages($langs->trans("NoNewRecordSaved"), null, 'warnings');
|
setEventMessages($langs->trans("NoNewRecordSaved"), null, 'warnings');
|
||||||
} else {
|
} else {
|
||||||
setEventMessages($langs->trans("GeneralLedgerSomeRecordWasNotRecorded"), null, 'warnings');
|
setEventMessages($langs->trans("GeneralLedgerSomeRecordWasNotRecorded"), null, 'warnings');
|
||||||
@ -796,8 +796,7 @@ if (!$error && $action == 'writebookkeeping') {
|
|||||||
$action = '';
|
$action = '';
|
||||||
|
|
||||||
// Must reload data, so we make a redirect
|
// Must reload data, so we make a redirect
|
||||||
if (count($tabpay) != $error)
|
if (count($tabpay) != $error) {
|
||||||
{
|
|
||||||
$param = 'id_journal='.$id_journal;
|
$param = 'id_journal='.$id_journal;
|
||||||
$param .= '&date_startday='.$date_startday;
|
$param .= '&date_startday='.$date_startday;
|
||||||
$param .= '&date_startmonth='.$date_startmonth;
|
$param .= '&date_startmonth='.$date_startmonth;
|
||||||
@ -835,26 +834,28 @@ if ($action == 'exportcsv') { // ISO and not UTF8 !
|
|||||||
print '"'.$langs->transnoentitiesnoconv("Note").'"'.$sep;
|
print '"'.$langs->transnoentitiesnoconv("Note").'"'.$sep;
|
||||||
print "\n";
|
print "\n";
|
||||||
|
|
||||||
foreach ($tabpay as $key => $val)
|
foreach ($tabpay as $key => $val) {
|
||||||
{
|
|
||||||
$date = dol_print_date($db->jdate($val["date"]), 'day');
|
$date = dol_print_date($db->jdate($val["date"]), 'day');
|
||||||
|
|
||||||
$ref = getSourceDocRef($val, $tabtype[$key]);
|
$ref = getSourceDocRef($val, $tabtype[$key]);
|
||||||
|
|
||||||
// Bank
|
// Bank
|
||||||
foreach ($tabbq[$key] as $k => $mt) {
|
foreach ($tabbq[$key] as $k => $mt) {
|
||||||
if ($mt)
|
if ($mt) {
|
||||||
{
|
|
||||||
$reflabel = '';
|
$reflabel = '';
|
||||||
if (!empty($val['lib'])) $reflabel .= dol_string_nohtmltag($val['lib'])." - ";
|
if (!empty($val['lib'])) {
|
||||||
|
$reflabel .= dol_string_nohtmltag($val['lib'])." - ";
|
||||||
|
}
|
||||||
$reflabel .= $langs->trans("Bank").' '.dol_string_nohtmltag($val['bank_account_ref']);
|
$reflabel .= $langs->trans("Bank").' '.dol_string_nohtmltag($val['bank_account_ref']);
|
||||||
if (!empty($val['soclib'])) $reflabel .= " - ".dol_string_nohtmltag($val['soclib']);
|
if (!empty($val['soclib'])) {
|
||||||
|
$reflabel .= " - ".dol_string_nohtmltag($val['soclib']);
|
||||||
|
}
|
||||||
|
|
||||||
print '"'.$key.'"'.$sep;
|
print '"'.$key.'"'.$sep;
|
||||||
print '"'.$date.'"'.$sep;
|
print '"'.$date.'"'.$sep;
|
||||||
print '"'.$val["type_payment"].'"'.$sep;
|
print '"'.$val["type_payment"].'"'.$sep;
|
||||||
print '"'.length_accountg(html_entity_decode($k)).'"'.$sep;
|
print '"'.length_accountg(html_entity_decode($k)).'"'.$sep;
|
||||||
print '"'.length_accountg(html_entity_decode($k)).'"'.$sep;
|
print '"'.length_accounta(html_entity_decode($k)).'"'.$sep;
|
||||||
print " ".$sep;
|
print " ".$sep;
|
||||||
print '"'.$reflabel.'"'.$sep;
|
print '"'.$reflabel.'"'.$sep;
|
||||||
print '"'.($mt >= 0 ? price($mt) : '').'"'.$sep;
|
print '"'.($mt >= 0 ? price($mt) : '').'"'.$sep;
|
||||||
@ -868,12 +869,12 @@ if ($action == 'exportcsv') { // ISO and not UTF8 !
|
|||||||
// Third party
|
// Third party
|
||||||
if (is_array($tabtp[$key])) {
|
if (is_array($tabtp[$key])) {
|
||||||
foreach ($tabtp[$key] as $k => $mt) {
|
foreach ($tabtp[$key] as $k => $mt) {
|
||||||
if ($mt)
|
if ($mt) {
|
||||||
{
|
|
||||||
$reflabel = '';
|
$reflabel = '';
|
||||||
if (!empty($val['lib'])) $reflabel .= dol_string_nohtmltag($val['lib']).($val['soclib'] ? " - " : "");
|
if (!empty($val['lib'])) {
|
||||||
if ($tabtype[$key] == 'banktransfert')
|
$reflabel .= dol_string_nohtmltag($val['lib']).($val['soclib'] ? " - " : "");
|
||||||
{
|
}
|
||||||
|
if ($tabtype[$key] == 'banktransfert') {
|
||||||
$reflabel .= dol_string_nohtmltag($langs->transnoentitiesnoconv('TransitionalAccount').' '.$account_transfer);
|
$reflabel .= dol_string_nohtmltag($langs->transnoentitiesnoconv('TransitionalAccount').' '.$account_transfer);
|
||||||
} else {
|
} else {
|
||||||
$reflabel .= dol_string_nohtmltag($val['soclib']);
|
$reflabel .= dol_string_nohtmltag($val['soclib']);
|
||||||
@ -882,7 +883,7 @@ if ($action == 'exportcsv') { // ISO and not UTF8 !
|
|||||||
print '"'.$key.'"'.$sep;
|
print '"'.$key.'"'.$sep;
|
||||||
print '"'.$date.'"'.$sep;
|
print '"'.$date.'"'.$sep;
|
||||||
print '"'.$val["type_payment"].'"'.$sep;
|
print '"'.$val["type_payment"].'"'.$sep;
|
||||||
print '"'.length_accounta(html_entity_decode($k)).'"'.$sep;
|
print '"'.length_accountg(html_entity_decode($k)).'"'.$sep;
|
||||||
if ($tabtype[$key] == 'payment_supplier') {
|
if ($tabtype[$key] == 'payment_supplier') {
|
||||||
print '"'.$conf->global->ACCOUNTING_ACCOUNT_SUPPLIER.'"'.$sep;
|
print '"'.$conf->global->ACCOUNTING_ACCOUNT_SUPPLIER.'"'.$sep;
|
||||||
} elseif ($tabtype[$key] == 'payment') {
|
} elseif ($tabtype[$key] == 'payment') {
|
||||||
@ -892,7 +893,7 @@ if ($action == 'exportcsv') { // ISO and not UTF8 !
|
|||||||
} elseif ($tabtype[$key] == 'payment_salary') {
|
} elseif ($tabtype[$key] == 'payment_salary') {
|
||||||
print '"'.$conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT.'"'.$sep;
|
print '"'.$conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT.'"'.$sep;
|
||||||
} else {
|
} else {
|
||||||
print '"'.length_accounta(html_entity_decode($k)).'"'.$sep;
|
print '"'.length_accountg(html_entity_decode($k)).'"'.$sep;
|
||||||
}
|
}
|
||||||
print '"'.length_accounta(html_entity_decode($k)).'"'.$sep;
|
print '"'.length_accounta(html_entity_decode($k)).'"'.$sep;
|
||||||
print '"'.$reflabel.'"'.$sep;
|
print '"'.$reflabel.'"'.$sep;
|
||||||
@ -905,17 +906,18 @@ if ($action == 'exportcsv') { // ISO and not UTF8 !
|
|||||||
}
|
}
|
||||||
} else { // If thirdparty unkown, output the waiting account
|
} else { // If thirdparty unkown, output the waiting account
|
||||||
foreach ($tabbq[$key] as $k => $mt) {
|
foreach ($tabbq[$key] as $k => $mt) {
|
||||||
if ($mt)
|
if ($mt) {
|
||||||
{
|
|
||||||
$reflabel = '';
|
$reflabel = '';
|
||||||
if (!empty($val['lib'])) $reflabel .= dol_string_nohtmltag($val['lib'])." - ";
|
if (!empty($val['lib'])) {
|
||||||
|
$reflabel .= dol_string_nohtmltag($val['lib'])." - ";
|
||||||
|
}
|
||||||
$reflabel .= dol_string_nohtmltag('WaitingAccount');
|
$reflabel .= dol_string_nohtmltag('WaitingAccount');
|
||||||
|
|
||||||
print '"'.$key.'"'.$sep;
|
print '"'.$key.'"'.$sep;
|
||||||
print '"'.$date.'"'.$sep;
|
print '"'.$date.'"'.$sep;
|
||||||
print '"'.$val["type_payment"].'"'.$sep;
|
print '"'.$val["type_payment"].'"'.$sep;
|
||||||
print '"'.length_accountg($conf->global->ACCOUNTING_ACCOUNT_SUSPENSE).'"'.$sep;
|
print '"'.length_accountg($conf->global->ACCOUNTING_ACCOUNT_SUSPENSE).'"'.$sep;
|
||||||
print '"'.length_accountg($conf->global->ACCOUNTING_ACCOUNT_SUSPENSE).'"'.$sep;
|
print '"'.length_accounta($conf->global->ACCOUNTING_ACCOUNT_SUSPENSE).'"'.$sep;
|
||||||
print "".$sep;
|
print "".$sep;
|
||||||
print '"'.$reflabel.'"'.$sep;
|
print '"'.$reflabel.'"'.$sep;
|
||||||
print '"'.($mt < 0 ? price(-$mt) : '').'"'.$sep;
|
print '"'.($mt < 0 ? price(-$mt) : '').'"'.$sep;
|
||||||
@ -965,16 +967,18 @@ if (empty($action) || $action == 'view') {
|
|||||||
// Test that setup is complete (we are in accounting, so test on entity is always on $conf->entity only, no sharing allowed)
|
// Test that setup is complete (we are in accounting, so test on entity is always on $conf->entity only, no sharing allowed)
|
||||||
$sql = 'SELECT COUNT(rowid) as nb FROM '.MAIN_DB_PREFIX.'bank_account WHERE entity = '.$conf->entity.' AND fk_accountancy_journal IS NULL AND clos=0';
|
$sql = 'SELECT COUNT(rowid) as nb FROM '.MAIN_DB_PREFIX.'bank_account WHERE entity = '.$conf->entity.' AND fk_accountancy_journal IS NULL AND clos=0';
|
||||||
$resql = $db->query($sql);
|
$resql = $db->query($sql);
|
||||||
if ($resql)
|
if ($resql) {
|
||||||
{
|
|
||||||
$obj = $db->fetch_object($resql);
|
$obj = $db->fetch_object($resql);
|
||||||
if ($obj->nb > 0)
|
if ($obj->nb > 0) {
|
||||||
{
|
|
||||||
print '<br><div class="warning">'.img_warning().' '.$langs->trans("TheJournalCodeIsNotDefinedOnSomeBankAccount");
|
print '<br><div class="warning">'.img_warning().' '.$langs->trans("TheJournalCodeIsNotDefinedOnSomeBankAccount");
|
||||||
print ' : '.$langs->trans("AccountancyAreaDescBank", 9, '<strong>'.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("Setup")."-".$langs->transnoentitiesnoconv("BankAccounts").'</strong>');
|
$desc = ' : '.$langs->trans("AccountancyAreaDescBank", 9, '{link}');
|
||||||
|
$desc = str_replace('{link}', '<strong>'.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("Setup")."-".$langs->transnoentitiesnoconv("BankAccounts").'</strong>', $desc);
|
||||||
|
print $desc;
|
||||||
print '</div>';
|
print '</div>';
|
||||||
}
|
}
|
||||||
} else dol_print_error($db);
|
} else {
|
||||||
|
dol_print_error($db);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Button to write into Ledger
|
// Button to write into Ledger
|
||||||
@ -988,14 +992,19 @@ if (empty($action) || $action == 'view') {
|
|||||||
|
|
||||||
print '<div class="tabsAction tabsActionNoBottom">';
|
print '<div class="tabsAction tabsActionNoBottom">';
|
||||||
|
|
||||||
if (!empty($conf->global->ACCOUNTING_ENABLE_EXPORT_DRAFT_JOURNAL) && $in_bookkeeping == 'notyet') print '<input type="button" class="butAction" name="exportcsv" value="'.$langs->trans("ExportDraftJournal").'" onclick="launch_export();" />';
|
if (!empty($conf->global->ACCOUNTING_ENABLE_EXPORT_DRAFT_JOURNAL) && $in_bookkeeping == 'notyet') {
|
||||||
|
print '<input type="button" class="butAction" name="exportcsv" value="'.$langs->trans("ExportDraftJournal").'" onclick="launch_export();" />';
|
||||||
|
}
|
||||||
|
|
||||||
if (($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == "") || $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == '-1'
|
if (($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == "") || $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER == '-1'
|
||||||
|| ($conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == "") || $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == '-1') {
|
|| ($conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == "") || $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER == '-1') {
|
||||||
print '<input type="button" class="butActionRefused classfortooltip" title="'.dol_escape_htmltag($langs->trans("SomeMandatoryStepsOfSetupWereNotDone")).'" value="'.$langs->trans("WriteBookKeeping").'" />';
|
print '<input type="button" class="butActionRefused classfortooltip" title="'.dol_escape_htmltag($langs->trans("SomeMandatoryStepsOfSetupWereNotDone")).'" value="'.$langs->trans("WriteBookKeeping").'" />';
|
||||||
} else {
|
} else {
|
||||||
if ($in_bookkeeping == 'notyet') print '<input type="button" class="butAction" name="writebookkeeping" value="'.$langs->trans("WriteBookKeeping").'" onclick="writebookkeeping();" />';
|
if ($in_bookkeeping == 'notyet') {
|
||||||
else print '<a class="butActionRefused classfortooltip" name="writebookkeeping">'.$langs->trans("WriteBookKeeping").'</a>';
|
print '<input type="button" class="butAction" name="writebookkeeping" value="'.$langs->trans("WriteBookKeeping").'" onclick="writebookkeeping();" />';
|
||||||
|
} else {
|
||||||
|
print '<a class="butActionRefused classfortooltip" name="writebookkeeping">'.$langs->trans("WriteBookKeeping").'</a>';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
print '</div>';
|
print '</div>';
|
||||||
@ -1038,21 +1047,22 @@ if (empty($action) || $action == 'view') {
|
|||||||
|
|
||||||
$r = '';
|
$r = '';
|
||||||
|
|
||||||
foreach ($tabpay as $key => $val) // $key is rowid in llx_bank
|
foreach ($tabpay as $key => $val) { // $key is rowid in llx_bank
|
||||||
{
|
|
||||||
$date = dol_print_date($db->jdate($val["date"]), 'day');
|
$date = dol_print_date($db->jdate($val["date"]), 'day');
|
||||||
|
|
||||||
$ref = getSourceDocRef($val, $tabtype[$key]);
|
$ref = getSourceDocRef($val, $tabtype[$key]);
|
||||||
|
|
||||||
// Bank
|
// Bank
|
||||||
foreach ($tabbq[$key] as $k => $mt)
|
foreach ($tabbq[$key] as $k => $mt) {
|
||||||
{
|
if ($mt) {
|
||||||
if ($mt)
|
|
||||||
{
|
|
||||||
$reflabel = '';
|
$reflabel = '';
|
||||||
if (!empty($val['lib'])) $reflabel .= $val['lib']." - ";
|
if (!empty($val['lib'])) {
|
||||||
|
$reflabel .= $val['lib']." - ";
|
||||||
|
}
|
||||||
$reflabel .= $langs->trans("Bank").' '.$val['bank_account_ref'];
|
$reflabel .= $langs->trans("Bank").' '.$val['bank_account_ref'];
|
||||||
if (!empty($val['soclib'])) $reflabel .= " - ".$val['soclib'];
|
if (!empty($val['soclib'])) {
|
||||||
|
$reflabel .= " - ".$val['soclib'];
|
||||||
|
}
|
||||||
|
|
||||||
//var_dump($tabpay[$key]);
|
//var_dump($tabpay[$key]);
|
||||||
print '<!-- Bank bank.rowid='.$key.' type='.$tabpay[$key]['type'].' ref='.$tabpay[$key]['ref'].'-->';
|
print '<!-- Bank bank.rowid='.$key.' type='.$tabpay[$key]['type'].' ref='.$tabpay[$key]['ref'].'-->';
|
||||||
@ -1062,10 +1072,11 @@ if (empty($action) || $action == 'view') {
|
|||||||
// Ledger account
|
// Ledger account
|
||||||
print "<td>";
|
print "<td>";
|
||||||
$accounttoshow = length_accountg($k);
|
$accounttoshow = length_accountg($k);
|
||||||
if (empty($accounttoshow) || $accounttoshow == 'NotDefined')
|
if (empty($accounttoshow) || $accounttoshow == 'NotDefined') {
|
||||||
{
|
|
||||||
print '<span class="error">'.$langs->trans("BankAccountNotDefined").'</span>';
|
print '<span class="error">'.$langs->trans("BankAccountNotDefined").'</span>';
|
||||||
} else print $accounttoshow;
|
} else {
|
||||||
|
print $accounttoshow;
|
||||||
|
}
|
||||||
print "</td>";
|
print "</td>";
|
||||||
// Subledger account
|
// Subledger account
|
||||||
print "<td>";
|
print "<td>";
|
||||||
@ -1089,12 +1100,12 @@ if (empty($action) || $action == 'view') {
|
|||||||
// Third party
|
// Third party
|
||||||
if (is_array($tabtp[$key])) {
|
if (is_array($tabtp[$key])) {
|
||||||
foreach ($tabtp[$key] as $k => $mt) {
|
foreach ($tabtp[$key] as $k => $mt) {
|
||||||
if ($mt)
|
if ($mt) {
|
||||||
{
|
|
||||||
$reflabel = '';
|
$reflabel = '';
|
||||||
if (!empty($val['lib'])) $reflabel .= $val['lib'].($val['soclib'] ? " - " : "");
|
if (!empty($val['lib'])) {
|
||||||
if ($tabtype[$key] == 'banktransfert')
|
$reflabel .= $val['lib'].($val['soclib'] ? " - " : "");
|
||||||
{
|
}
|
||||||
|
if ($tabtype[$key] == 'banktransfert') {
|
||||||
$reflabel .= $langs->trans('TransitionalAccount').' '.$account_transfer;
|
$reflabel .= $langs->trans('TransitionalAccount').' '.$account_transfer;
|
||||||
} else {
|
} else {
|
||||||
$reflabel .= $val['soclib'];
|
$reflabel .= $val['soclib'];
|
||||||
@ -1108,21 +1119,32 @@ if (empty($action) || $action == 'view') {
|
|||||||
print "<td>";
|
print "<td>";
|
||||||
$account_ledger = $k;
|
$account_ledger = $k;
|
||||||
// Try to force general ledger account depending on type
|
// Try to force general ledger account depending on type
|
||||||
if ($tabtype[$key] == 'payment') $account_ledger = $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER;
|
if ($tabtype[$key] == 'payment') {
|
||||||
if ($tabtype[$key] == 'payment_supplier') $account_ledger = $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER;
|
$account_ledger = $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER;
|
||||||
if ($tabtype[$key] == 'payment_expensereport') $account_ledger = $conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT;
|
}
|
||||||
if ($tabtype[$key] == 'payment_salary') $account_ledger = $conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT;
|
if ($tabtype[$key] == 'payment_supplier') {
|
||||||
if ($tabtype[$key] == 'payment_vat') $account_ledger = $conf->global->ACCOUNTING_VAT_PAY_ACCOUNT;
|
$account_ledger = $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER;
|
||||||
if ($tabtype[$key] == 'member') $account_ledger = $conf->global->ADHERENT_SUBSCRIPTION_ACCOUNTINGACCOUNT;
|
}
|
||||||
if ($tabtype[$key] == 'payment_various') $account_ledger = $tabpay[$key]["account_various"];
|
if ($tabtype[$key] == 'payment_expensereport') {
|
||||||
$accounttoshow = length_accounta($account_ledger);
|
$account_ledger = $conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT;
|
||||||
if (empty($accounttoshow) || $accounttoshow == 'NotDefined')
|
}
|
||||||
{
|
if ($tabtype[$key] == 'payment_salary') {
|
||||||
if ($tabtype[$key] == 'unknown')
|
$account_ledger = $conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT;
|
||||||
{
|
}
|
||||||
|
if ($tabtype[$key] == 'payment_vat') {
|
||||||
|
$account_ledger = $conf->global->ACCOUNTING_VAT_PAY_ACCOUNT;
|
||||||
|
}
|
||||||
|
if ($tabtype[$key] == 'member') {
|
||||||
|
$account_ledger = $conf->global->ADHERENT_SUBSCRIPTION_ACCOUNTINGACCOUNT;
|
||||||
|
}
|
||||||
|
if ($tabtype[$key] == 'payment_various') {
|
||||||
|
$account_ledger = $tabpay[$key]["account_various"];
|
||||||
|
}
|
||||||
|
$accounttoshow = length_accountg($account_ledger);
|
||||||
|
if (empty($accounttoshow) || $accounttoshow == 'NotDefined') {
|
||||||
|
if ($tabtype[$key] == 'unknown') {
|
||||||
// We will accept writing, but into a waiting account
|
// We will accept writing, but into a waiting account
|
||||||
if (empty($conf->global->ACCOUNTING_ACCOUNT_SUSPENSE) || $conf->global->ACCOUNTING_ACCOUNT_SUSPENSE == '-1')
|
if (empty($conf->global->ACCOUNTING_ACCOUNT_SUSPENSE) || $conf->global->ACCOUNTING_ACCOUNT_SUSPENSE == '-1') {
|
||||||
{
|
|
||||||
print '<span class="error">'.$langs->trans('UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking').'</span>';
|
print '<span class="error">'.$langs->trans('UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking').'</span>';
|
||||||
} else {
|
} else {
|
||||||
print '<span class="warning">'.$langs->trans('UnknownAccountForThirdparty', length_accountg($conf->global->ACCOUNTING_ACCOUNT_SUSPENSE)).'</span>'; // We will use a waiting account
|
print '<span class="warning">'.$langs->trans('UnknownAccountForThirdparty', length_accountg($conf->global->ACCOUNTING_ACCOUNT_SUSPENSE)).'</span>'; // We will use a waiting account
|
||||||
@ -1130,32 +1152,42 @@ if (empty($action) || $action == 'view') {
|
|||||||
} else {
|
} else {
|
||||||
// We will refuse writing
|
// We will refuse writing
|
||||||
$errorstring = 'UnknownAccountForThirdpartyBlocking';
|
$errorstring = 'UnknownAccountForThirdpartyBlocking';
|
||||||
if ($tabtype[$key] == 'payment') $errorstring = 'MainAccountForCustomersNotDefined';
|
if ($tabtype[$key] == 'payment') {
|
||||||
if ($tabtype[$key] == 'payment_supplier') $errorstring = 'MainAccountForSuppliersNotDefined';
|
$errorstring = 'MainAccountForCustomersNotDefined';
|
||||||
if ($tabtype[$key] == 'payment_expensereport') $errorstring = 'MainAccountForUsersNotDefined';
|
}
|
||||||
if ($tabtype[$key] == 'payment_salary') $errorstring = 'MainAccountForUsersNotDefined';
|
if ($tabtype[$key] == 'payment_supplier') {
|
||||||
if ($tabtype[$key] == 'payment_vat') $errorstring = 'MainAccountForVatPaymentNotDefined';
|
$errorstring = 'MainAccountForSuppliersNotDefined';
|
||||||
if ($tabtype[$key] == 'member') $errorstring = 'MainAccountForSubscriptionPaymentNotDefined';
|
}
|
||||||
|
if ($tabtype[$key] == 'payment_expensereport') {
|
||||||
|
$errorstring = 'MainAccountForUsersNotDefined';
|
||||||
|
}
|
||||||
|
if ($tabtype[$key] == 'payment_salary') {
|
||||||
|
$errorstring = 'MainAccountForUsersNotDefined';
|
||||||
|
}
|
||||||
|
if ($tabtype[$key] == 'payment_vat') {
|
||||||
|
$errorstring = 'MainAccountForVatPaymentNotDefined';
|
||||||
|
}
|
||||||
|
if ($tabtype[$key] == 'member') {
|
||||||
|
$errorstring = 'MainAccountForSubscriptionPaymentNotDefined';
|
||||||
|
}
|
||||||
print '<span class="error">'.$langs->trans($errorstring).'</span>';
|
print '<span class="error">'.$langs->trans($errorstring).'</span>';
|
||||||
}
|
}
|
||||||
} else print $accounttoshow;
|
} else {
|
||||||
|
print $accounttoshow;
|
||||||
|
}
|
||||||
print "</td>";
|
print "</td>";
|
||||||
|
|
||||||
// Subledger account
|
// Subledger account
|
||||||
print "<td>";
|
print "<td>";
|
||||||
if (in_array($tabtype[$key], array('payment', 'payment_supplier', 'payment_expensereport', 'payment_salary', 'payment_various'))) // Type of payment with subledger
|
if (in_array($tabtype[$key], array('payment', 'payment_supplier', 'payment_expensereport', 'payment_salary', 'payment_various'))) { // Type of payment with subledger
|
||||||
{
|
|
||||||
$accounttoshowsubledger = length_accounta($k);
|
$accounttoshowsubledger = length_accounta($k);
|
||||||
if ($accounttoshow != $accounttoshowsubledger)
|
if ($accounttoshow != $accounttoshowsubledger) {
|
||||||
{
|
if (empty($accounttoshowsubledger) || $accounttoshowsubledger == 'NotDefined') {
|
||||||
if (empty($accounttoshowsubledger) || $accounttoshowsubledger == 'NotDefined')
|
|
||||||
{
|
|
||||||
/*var_dump($tabpay[$key]);
|
/*var_dump($tabpay[$key]);
|
||||||
var_dump($tabtype[$key]);
|
var_dump($tabtype[$key]);
|
||||||
var_dump($tabbq[$key]);*/
|
var_dump($tabbq[$key]);*/
|
||||||
//print '<span class="error">'.$langs->trans("ThirdpartyAccountNotDefined").'</span>';
|
//print '<span class="error">'.$langs->trans("ThirdpartyAccountNotDefined").'</span>';
|
||||||
if (!empty($tabcompany[$key]['code_compta']))
|
if (!empty($tabcompany[$key]['code_compta'])) {
|
||||||
{
|
|
||||||
if (in_array($tabtype[$key], array('payment_various'))) {
|
if (in_array($tabtype[$key], array('payment_various'))) {
|
||||||
// For such case, if subledger is not defined, we won't use subledger accounts.
|
// For such case, if subledger is not defined, we won't use subledger accounts.
|
||||||
print '<span class="warning">'.$langs->trans("ThirdpartyAccountNotDefinedOrThirdPartyUnknownSubledgerIgnored").'</span>';
|
print '<span class="warning">'.$langs->trans("ThirdpartyAccountNotDefinedOrThirdPartyUnknownSubledgerIgnored").'</span>';
|
||||||
@ -1165,7 +1197,9 @@ if (empty($action) || $action == 'view') {
|
|||||||
} else {
|
} else {
|
||||||
print '<span class="error">'.$langs->trans("ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking").'</span>';
|
print '<span class="error">'.$langs->trans("ThirdpartyAccountNotDefinedOrThirdPartyUnknownBlocking").'</span>';
|
||||||
}
|
}
|
||||||
} else print $accounttoshowsubledger;
|
} else {
|
||||||
|
print $accounttoshowsubledger;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
print "</td>";
|
print "</td>";
|
||||||
@ -1178,10 +1212,11 @@ if (empty($action) || $action == 'view') {
|
|||||||
}
|
}
|
||||||
} else { // Waiting account
|
} else { // Waiting account
|
||||||
foreach ($tabbq[$key] as $k => $mt) {
|
foreach ($tabbq[$key] as $k => $mt) {
|
||||||
if ($mt)
|
if ($mt) {
|
||||||
{
|
|
||||||
$reflabel = '';
|
$reflabel = '';
|
||||||
if (!empty($val['lib'])) $reflabel .= $val['lib']." - ";
|
if (!empty($val['lib'])) {
|
||||||
|
$reflabel .= $val['lib']." - ";
|
||||||
|
}
|
||||||
$reflabel .= 'WaitingAccount';
|
$reflabel .= 'WaitingAccount';
|
||||||
|
|
||||||
print '<!-- Wait bank.rowid='.$key.' -->';
|
print '<!-- Wait bank.rowid='.$key.' -->';
|
||||||
@ -1265,78 +1300,67 @@ function getSourceDocRef($val, $typerecord)
|
|||||||
}
|
}
|
||||||
|
|
||||||
$sqlmid = '';
|
$sqlmid = '';
|
||||||
if ($typerecord == 'payment')
|
if ($typerecord == 'payment') {
|
||||||
{
|
|
||||||
$sqlmid = 'SELECT payfac.fk_facture as id, f.ref as ref';
|
$sqlmid = 'SELECT payfac.fk_facture as id, f.ref as ref';
|
||||||
$sqlmid .= " FROM ".MAIN_DB_PREFIX."paiement_facture as payfac, ".MAIN_DB_PREFIX."facture as f";
|
$sqlmid .= " FROM ".MAIN_DB_PREFIX."paiement_facture as payfac, ".MAIN_DB_PREFIX."facture as f";
|
||||||
$sqlmid .= " WHERE payfac.fk_facture = f.rowid AND payfac.fk_paiement=".$val["paymentid"];
|
$sqlmid .= " WHERE payfac.fk_facture = f.rowid AND payfac.fk_paiement=".$val["paymentid"];
|
||||||
$ref = $langs->transnoentitiesnoconv("Invoice");
|
$ref = $langs->transnoentitiesnoconv("Invoice");
|
||||||
} elseif ($typerecord == 'payment_supplier')
|
} elseif ($typerecord == 'payment_supplier') {
|
||||||
{
|
|
||||||
$sqlmid = 'SELECT payfac.fk_facturefourn as id, f.ref';
|
$sqlmid = 'SELECT payfac.fk_facturefourn as id, f.ref';
|
||||||
$sqlmid .= " FROM ".MAIN_DB_PREFIX."paiementfourn_facturefourn as payfac, ".MAIN_DB_PREFIX."facture_fourn as f";
|
$sqlmid .= " FROM ".MAIN_DB_PREFIX."paiementfourn_facturefourn as payfac, ".MAIN_DB_PREFIX."facture_fourn as f";
|
||||||
$sqlmid .= " WHERE payfac.fk_facturefourn = f.rowid AND payfac.fk_paiementfourn=".$val["paymentsupplierid"];
|
$sqlmid .= " WHERE payfac.fk_facturefourn = f.rowid AND payfac.fk_paiementfourn=".$val["paymentsupplierid"];
|
||||||
$ref = $langs->transnoentitiesnoconv("SupplierInvoice");
|
$ref = $langs->transnoentitiesnoconv("SupplierInvoice");
|
||||||
} elseif ($typerecord == 'payment_expensereport')
|
} elseif ($typerecord == 'payment_expensereport') {
|
||||||
{
|
|
||||||
$sqlmid = 'SELECT e.rowid as id, e.ref';
|
$sqlmid = 'SELECT e.rowid as id, e.ref';
|
||||||
$sqlmid .= " FROM ".MAIN_DB_PREFIX."payment_expensereport as pe, ".MAIN_DB_PREFIX."expensereport as e";
|
$sqlmid .= " FROM ".MAIN_DB_PREFIX."payment_expensereport as pe, ".MAIN_DB_PREFIX."expensereport as e";
|
||||||
$sqlmid .= " WHERE pe.rowid=".$val["paymentexpensereport"]." AND pe.fk_expensereport = e.rowid";
|
$sqlmid .= " WHERE pe.rowid=".$val["paymentexpensereport"]." AND pe.fk_expensereport = e.rowid";
|
||||||
$ref = $langs->transnoentitiesnoconv("ExpenseReport");
|
$ref = $langs->transnoentitiesnoconv("ExpenseReport");
|
||||||
} elseif ($typerecord == 'payment_salary')
|
} elseif ($typerecord == 'payment_salary') {
|
||||||
{
|
|
||||||
$sqlmid = 'SELECT s.rowid as ref';
|
$sqlmid = 'SELECT s.rowid as ref';
|
||||||
$sqlmid .= " FROM ".MAIN_DB_PREFIX."payment_salary as s";
|
$sqlmid .= " FROM ".MAIN_DB_PREFIX."payment_salary as s";
|
||||||
$sqlmid .= " WHERE s.rowid=".$val["paymentsalid"];
|
$sqlmid .= " WHERE s.rowid=".$val["paymentsalid"];
|
||||||
$ref = $langs->transnoentitiesnoconv("SalaryPayment");
|
$ref = $langs->transnoentitiesnoconv("SalaryPayment");
|
||||||
} elseif ($typerecord == 'sc')
|
} elseif ($typerecord == 'sc') {
|
||||||
{
|
|
||||||
$sqlmid = 'SELECT sc.rowid as ref';
|
$sqlmid = 'SELECT sc.rowid as ref';
|
||||||
$sqlmid .= " FROM ".MAIN_DB_PREFIX."paiementcharge as sc";
|
$sqlmid .= " FROM ".MAIN_DB_PREFIX."paiementcharge as sc";
|
||||||
$sqlmid .= " WHERE sc.rowid=".$val["paymentscid"];
|
$sqlmid .= " WHERE sc.rowid=".$val["paymentscid"];
|
||||||
$ref = $langs->transnoentitiesnoconv("SocialContribution");
|
$ref = $langs->transnoentitiesnoconv("SocialContribution");
|
||||||
} elseif ($typerecord == 'payment_vat')
|
} elseif ($typerecord == 'payment_vat') {
|
||||||
{
|
|
||||||
$sqlmid = 'SELECT v.rowid as ref';
|
$sqlmid = 'SELECT v.rowid as ref';
|
||||||
$sqlmid .= " FROM ".MAIN_DB_PREFIX."tva as v";
|
$sqlmid .= " FROM ".MAIN_DB_PREFIX."tva as v";
|
||||||
$sqlmid .= " WHERE v.rowid=".$val["paymentvatid"];
|
$sqlmid .= " WHERE v.rowid=".$val["paymentvatid"];
|
||||||
$ref = $langs->transnoentitiesnoconv("PaymentVat");
|
$ref = $langs->transnoentitiesnoconv("PaymentVat");
|
||||||
} elseif ($typerecord == 'payment_donation')
|
} elseif ($typerecord == 'payment_donation') {
|
||||||
{
|
|
||||||
$sqlmid = 'SELECT payd.fk_donation as ref';
|
$sqlmid = 'SELECT payd.fk_donation as ref';
|
||||||
$sqlmid .= " FROM ".MAIN_DB_PREFIX."payment_donation as payd";
|
$sqlmid .= " FROM ".MAIN_DB_PREFIX."payment_donation as payd";
|
||||||
$sqlmid .= " WHERE payd.fk_donation=".$val["paymentdonationid"];
|
$sqlmid .= " WHERE payd.fk_donation=".$val["paymentdonationid"];
|
||||||
$ref = $langs->transnoentitiesnoconv("Donation");
|
$ref = $langs->transnoentitiesnoconv("Donation");
|
||||||
} elseif ($typerecord == 'payment_loan')
|
} elseif ($typerecord == 'payment_loan') {
|
||||||
{
|
|
||||||
$sqlmid = 'SELECT l.rowid as ref';
|
$sqlmid = 'SELECT l.rowid as ref';
|
||||||
$sqlmid .= " FROM ".MAIN_DB_PREFIX."payment_loan as l";
|
$sqlmid .= " FROM ".MAIN_DB_PREFIX."payment_loan as l";
|
||||||
$sqlmid .= " WHERE l.rowid=".$val["paymentloanid"];
|
$sqlmid .= " WHERE l.rowid=".$val["paymentloanid"];
|
||||||
$ref = $langs->transnoentitiesnoconv("LoanPayment");
|
$ref = $langs->transnoentitiesnoconv("LoanPayment");
|
||||||
} elseif ($typerecord == 'payment_various')
|
} elseif ($typerecord == 'payment_various') {
|
||||||
{
|
|
||||||
$sqlmid = 'SELECT v.rowid as ref';
|
$sqlmid = 'SELECT v.rowid as ref';
|
||||||
$sqlmid .= " FROM ".MAIN_DB_PREFIX."payment_various as v";
|
$sqlmid .= " FROM ".MAIN_DB_PREFIX."payment_various as v";
|
||||||
$sqlmid .= " WHERE v.rowid=".$val["paymentvariousid"];
|
$sqlmid .= " WHERE v.rowid=".$val["paymentvariousid"];
|
||||||
$ref = $langs->transnoentitiesnoconv("VariousPayment");
|
$ref = $langs->transnoentitiesnoconv("VariousPayment");
|
||||||
}
|
}
|
||||||
// Add warning
|
// Add warning
|
||||||
if (empty($sqlmid))
|
if (empty($sqlmid)) {
|
||||||
{
|
|
||||||
dol_syslog("Found a typerecord=".$typerecord." not supported", LOG_WARNING);
|
dol_syslog("Found a typerecord=".$typerecord." not supported", LOG_WARNING);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($sqlmid)
|
if ($sqlmid) {
|
||||||
{
|
|
||||||
dol_syslog("accountancy/journal/bankjournal.php::sqlmid=".$sqlmid, LOG_DEBUG);
|
dol_syslog("accountancy/journal/bankjournal.php::sqlmid=".$sqlmid, LOG_DEBUG);
|
||||||
$resultmid = $db->query($sqlmid);
|
$resultmid = $db->query($sqlmid);
|
||||||
if ($resultmid)
|
if ($resultmid) {
|
||||||
{
|
while ($objmid = $db->fetch_object($resultmid)) {
|
||||||
while ($objmid = $db->fetch_object($resultmid))
|
|
||||||
{
|
|
||||||
$ref .= ' '.$objmid->ref;
|
$ref .= ' '.$objmid->ref;
|
||||||
}
|
}
|
||||||
} else dol_print_error($db);
|
} else {
|
||||||
|
dol_print_error($db);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$ref = dol_trunc($langs->transnoentitiesnoconv("BankId").' '.$val['fk_bank'].' - '.$ref, 295); // 295 + 3 dots (...) is < than max size of 300
|
$ref = dol_trunc($langs->transnoentitiesnoconv("BankId").' '.$val['fk_bank'].' - '.$ref, 295); // 295 + 3 dots (...) is < than max size of 300
|
||||||
|
|||||||
@ -669,7 +669,7 @@ if ($action == 'exportcsv') { // ISO and not UTF8 !
|
|||||||
print '"'.length_accountg(html_entity_decode($k)).'"'.$sep;
|
print '"'.length_accountg(html_entity_decode($k)).'"'.$sep;
|
||||||
print '"'.length_accountg(html_entity_decode($k)).'"'.$sep;
|
print '"'.length_accountg(html_entity_decode($k)).'"'.$sep;
|
||||||
print '""'.$sep;
|
print '""'.$sep;
|
||||||
print '"'.$langs->trans("VAT").' - '.$def_tva[$key].'"'.$sep;
|
print '"'.$langs->trans("VAT").' - '.join(', ', $def_tva[$key][$k]).' %"'.$sep;
|
||||||
print '"'.utf8_decode(dol_trunc($companystatic->name, 16)).' - '.$val["refsuppliersologest"].' - '.$langs->trans("VAT").join(', ', $def_tva[$key][$k]).' %'.($numtax ? ' - Localtax '.$numtax : '').'"'.$sep;
|
print '"'.utf8_decode(dol_trunc($companystatic->name, 16)).' - '.$val["refsuppliersologest"].' - '.$langs->trans("VAT").join(', ', $def_tva[$key][$k]).' %'.($numtax ? ' - Localtax '.$numtax : '').'"'.$sep;
|
||||||
print '"'.($mt >= 0 ? price($mt) : '').'"'.$sep;
|
print '"'.($mt >= 0 ? price($mt) : '').'"'.$sep;
|
||||||
print '"'.($mt < 0 ? price(-$mt) : '').'"'.$sep;
|
print '"'.($mt < 0 ? price(-$mt) : '').'"'.$sep;
|
||||||
|
|||||||
@ -628,7 +628,7 @@ if ($action == 'exportcsv') { // ISO and not UTF8 !
|
|||||||
print '"'.length_accountg(html_entity_decode($k)).'"'.$sep;
|
print '"'.length_accountg(html_entity_decode($k)).'"'.$sep;
|
||||||
print '"'.length_accountg(html_entity_decode($k)).'"'.$sep;
|
print '"'.length_accountg(html_entity_decode($k)).'"'.$sep;
|
||||||
print '""'.$sep;
|
print '""'.$sep;
|
||||||
print '"'.$langs->trans("VAT").' - '.$def_tva[$key].' %"'.$sep;
|
print '"'.$langs->trans("VAT").' - '.join(', ', $def_tva[$key][$k]).' %"'.$sep;
|
||||||
print '"'.utf8_decode(dol_trunc($companystatic->name, 16)).' - '.$invoicestatic->ref.' - '.$langs->trans("VAT").join(', ', $def_tva[$key][$k]).' %'.($numtax ? ' - Localtax '.$numtax : '').'"'.$sep;
|
print '"'.utf8_decode(dol_trunc($companystatic->name, 16)).' - '.$invoicestatic->ref.' - '.$langs->trans("VAT").join(', ', $def_tva[$key][$k]).' %'.($numtax ? ' - Localtax '.$numtax : '').'"'.$sep;
|
||||||
print '"'.($mt < 0 ? price(-$mt) : '').'"'.$sep;
|
print '"'.($mt < 0 ? price(-$mt) : '').'"'.$sep;
|
||||||
print '"'.($mt >= 0 ? price($mt) : '').'"'.$sep;
|
print '"'.($mt >= 0 ? price($mt) : '').'"'.$sep;
|
||||||
|
|||||||
@ -144,9 +144,9 @@ if (!empty($id)) {
|
|||||||
print dol_get_fiche_end();
|
print dol_get_fiche_end();
|
||||||
|
|
||||||
print '<div class="center">';
|
print '<div class="center">';
|
||||||
print '<input class="button" type="submit" value="'.$langs->trans("Save").'">';
|
print '<input class="button button-save" type="submit" value="'.$langs->trans("Save").'">';
|
||||||
print ' ';
|
print ' ';
|
||||||
print '<input class="button" type="submit" name="cancel" value="'.$langs->trans("Cancel").'">';
|
print '<input class="button button-cancel" type="submit" name="cancel" value="'.$langs->trans("Cancel").'">';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
|
||||||
print '</form>';
|
print '</form>';
|
||||||
|
|||||||
@ -135,7 +135,7 @@ if (is_array($changeaccount) && count($changeaccount) > 0) {
|
|||||||
}
|
}
|
||||||
if (!$error) {
|
if (!$error) {
|
||||||
$db->commit();
|
$db->commit();
|
||||||
setEventMessages($langs->trans('Save'), null, 'mesgs');
|
setEventMessages($langs->trans("Save"), null, 'mesgs');
|
||||||
} else {
|
} else {
|
||||||
$db->rollback();
|
$db->rollback();
|
||||||
setEventMessages($db->lasterror(), null, 'errors');
|
setEventMessages($db->lasterror(), null, 'errors');
|
||||||
|
|||||||
@ -7,7 +7,8 @@
|
|||||||
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com>
|
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com>
|
||||||
* Copyright (C) 2011-2012 Juanjo Menent <jmenent@2byte.es>
|
* Copyright (C) 2011-2012 Juanjo Menent <jmenent@2byte.es>
|
||||||
* Copyright (C) 2012 J. Fernando Lagrange <fernando@demo-tic.org>
|
* Copyright (C) 2012 J. Fernando Lagrange <fernando@demo-tic.org>
|
||||||
* Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
|
* Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
|
||||||
|
* Copyright (C) 2020 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
|
||||||
* 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
|
||||||
@ -39,7 +40,12 @@ $langs->loadLangs(array("admin", "members"));
|
|||||||
if (!$user->admin) accessforbidden();
|
if (!$user->admin) accessforbidden();
|
||||||
|
|
||||||
|
|
||||||
$type = array('yesno', 'texte', 'chaine');
|
$choices = array('yesno', 'texte', 'chaine');
|
||||||
|
|
||||||
|
$value = GETPOST('value', 'alpha');
|
||||||
|
$label = GETPOST('label', 'alpha');
|
||||||
|
$scandir = GETPOST('scandir', 'alpha');
|
||||||
|
$type = 'member';
|
||||||
|
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
|
|
||||||
@ -48,8 +54,50 @@ $action = GETPOST('action', 'aZ09');
|
|||||||
* Actions
|
* Actions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//
|
include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php';
|
||||||
if ($action == 'updateall') {
|
|
||||||
|
if ($action == 'set_default') {
|
||||||
|
$ret = addDocumentModel($value, $type, $label, $scandir);
|
||||||
|
$res = true;
|
||||||
|
} elseif ($action == 'del_default') {
|
||||||
|
$ret = delDocumentModel($value, $type);
|
||||||
|
if ($ret > 0) {
|
||||||
|
if ($conf->global->MEMBER_ADDON_PDF_ODT == "$value") {
|
||||||
|
dolibarr_del_const($db, 'MEMBER_ADDON_PDF_ODT', $conf->entity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$res = true;
|
||||||
|
} elseif ($action == 'setdoc') {
|
||||||
|
// Set default model
|
||||||
|
if (dolibarr_set_const($db, "MEMBER_ADDON_PDF_ODT", $value, 'chaine', 0, '', $conf->entity)) {
|
||||||
|
// La constante qui a ete lue en avant du nouveau set
|
||||||
|
// on passe donc par une variable pour avoir un affichage coherent
|
||||||
|
$conf->global->MEMBER_ADDON_PDF_ODT = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
// On active le modele
|
||||||
|
$ret = delDocumentModel($value, $type);
|
||||||
|
if ($ret > 0) {
|
||||||
|
$ret = addDocumentModel($value, $type, $label, $scandir);
|
||||||
|
}
|
||||||
|
$res = true;
|
||||||
|
} elseif (preg_match('/set_([a-z0-9_\-]+)/i', $action, $reg)) {
|
||||||
|
$code = $reg[1];
|
||||||
|
if (dolibarr_set_const($db, $code, 1, 'chaine', 0, '', $conf->entity) > 0) {
|
||||||
|
header("Location: ".$_SERVER["PHP_SELF"]);
|
||||||
|
exit;
|
||||||
|
} else {
|
||||||
|
dol_print_error($db);
|
||||||
|
}
|
||||||
|
} elseif (preg_match('/del_([a-z0-9_\-]+)/i', $action, $reg)) {
|
||||||
|
$code = $reg[1];
|
||||||
|
if (dolibarr_del_const($db, $code, $conf->entity) > 0) {
|
||||||
|
header("Location: ".$_SERVER["PHP_SELF"]);
|
||||||
|
exit;
|
||||||
|
} else {
|
||||||
|
dol_print_error($db);
|
||||||
|
}
|
||||||
|
} elseif ($action == 'updateall') {
|
||||||
$db->begin();
|
$db->begin();
|
||||||
$res1 = $res2 = $res3 = $res4 = $res5 = $res6 = 0;
|
$res1 = $res2 = $res3 = $res4 = $res5 = $res6 = 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);
|
||||||
@ -86,7 +134,7 @@ if ($action == 'update' || $action == 'add') {
|
|||||||
|
|
||||||
$consttype = GETPOST('consttype', 'alpha');
|
$consttype = GETPOST('consttype', 'alpha');
|
||||||
$constnote = GETPOST('constnote');
|
$constnote = GETPOST('constnote');
|
||||||
$res = dolibarr_set_const($db, $constname, $constvalue, $type[$consttype], 0, $constnote, $conf->entity);
|
$res = dolibarr_set_const($db, $constname, $constvalue, $choices[$consttype], 0, $constnote, $conf->entity);
|
||||||
|
|
||||||
if (!$res > 0) $error++;
|
if (!$res > 0) $error++;
|
||||||
|
|
||||||
@ -245,6 +293,137 @@ $helptext .= '__COMPANY__, __ADDRESS__, __ZIP__, __TOWN__, __COUNTRY__, __EMAIL_
|
|||||||
$helptext .= '__YEAR__, __MONTH__, __DAY__';
|
$helptext .= '__YEAR__, __MONTH__, __DAY__';
|
||||||
|
|
||||||
form_constantes($constantes, 0, $helptext);
|
form_constantes($constantes, 0, $helptext);
|
||||||
|
$dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
|
||||||
|
|
||||||
|
// Defini tableau def des modeles
|
||||||
|
$def = array();
|
||||||
|
$sql = "SELECT nom";
|
||||||
|
$sql .= " FROM ".MAIN_DB_PREFIX."document_model";
|
||||||
|
$sql .= " WHERE type = '".$db->escape($type)."'";
|
||||||
|
$sql .= " AND entity = ".$conf->entity;
|
||||||
|
$resql = $db->query($sql);
|
||||||
|
if ($resql) {
|
||||||
|
$i = 0;
|
||||||
|
$num_rows = $db->num_rows($resql);
|
||||||
|
while ($i < $num_rows) {
|
||||||
|
$array = $db->fetch_array($resql);
|
||||||
|
array_push($def, $array[0]);
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
dol_print_error($db);
|
||||||
|
}
|
||||||
|
|
||||||
|
print load_fiche_titre($langs->trans("MembersDocModules"), '', '');
|
||||||
|
|
||||||
|
print '<table class="noborder centpercent">';
|
||||||
|
print '<tr class="liste_titre">';
|
||||||
|
print '<td>'.$langs->trans("Name").'</td>';
|
||||||
|
print '<td>'.$langs->trans("Description").'</td>';
|
||||||
|
print '<td align="center" width="60">'.$langs->trans("Status")."</td>\n";
|
||||||
|
print '<td align="center" width="60">'.$langs->trans("Default")."</td>\n";
|
||||||
|
print '<td align="center" width="80">'.$langs->trans("ShortInfo").'</td>';
|
||||||
|
print '<td align="center" width="80">'.$langs->trans("Preview").'</td>';
|
||||||
|
print "</tr>\n";
|
||||||
|
|
||||||
|
clearstatcache();
|
||||||
|
|
||||||
|
foreach ($dirmodels as $reldir) {
|
||||||
|
foreach (array('', '/doc') as $valdir) {
|
||||||
|
$dir = dol_buildpath($reldir."core/modules/member".$valdir);
|
||||||
|
if (is_dir($dir)) {
|
||||||
|
$handle = opendir($dir);
|
||||||
|
if (is_resource($handle)) {
|
||||||
|
while (($file = readdir($handle)) !== false) {
|
||||||
|
$filelist[] = $file;
|
||||||
|
}
|
||||||
|
closedir($handle);
|
||||||
|
arsort($filelist);
|
||||||
|
foreach ($filelist as $file) {
|
||||||
|
if (preg_match('/\.class\.php$/i', $file) && preg_match('/^(pdf_|doc_)/', $file)) {
|
||||||
|
if (file_exists($dir.'/'.$file)) {
|
||||||
|
$name = substr($file, 4, dol_strlen($file) - 14);
|
||||||
|
$classname = substr($file, 0, dol_strlen($file) - 10);
|
||||||
|
|
||||||
|
require_once $dir.'/'.$file;
|
||||||
|
$module = new $classname($db);
|
||||||
|
|
||||||
|
$modulequalified = 1;
|
||||||
|
if ($module->version == 'development' && $conf->global->MAIN_FEATURES_LEVEL < 2) $modulequalified = 0;
|
||||||
|
if ($module->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1) {
|
||||||
|
$modulequalified = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($modulequalified) {
|
||||||
|
print '<tr class="oddeven"><td width="100">';
|
||||||
|
print (empty($module->name) ? $name : $module->name);
|
||||||
|
print "</td><td>\n";
|
||||||
|
if (method_exists($module, 'info')) {
|
||||||
|
print $module->info($langs);
|
||||||
|
} else {
|
||||||
|
print $module->description;
|
||||||
|
}
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
|
// Active
|
||||||
|
if (in_array($name, $def)) {
|
||||||
|
print '<td class="center">'."\n";
|
||||||
|
print '<a href="'.$_SERVER["PHP_SELF"].'?action=del_default&token='.newToken().'&value='.$name.'">';
|
||||||
|
print img_picto($langs->trans("Enabled"), 'switch_on');
|
||||||
|
print '</a>';
|
||||||
|
print '</td>';
|
||||||
|
} else {
|
||||||
|
print '<td class="center">'."\n";
|
||||||
|
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set_default&token='.newToken().'&value='.$name.'&scandir='.$module->scandir.'&label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"), 'switch_off').'</a>';
|
||||||
|
print "</td>";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Defaut
|
||||||
|
print '<td class="center">';
|
||||||
|
if ($conf->global->MEMBER_ADDON_PDF == $name) {
|
||||||
|
print img_picto($langs->trans("Default"), 'on');
|
||||||
|
} else {
|
||||||
|
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&token='.newToken().'&value='.$name.'&scandir='.$module->scandir.'&label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"), 'off').'</a>';
|
||||||
|
}
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
|
// Info
|
||||||
|
$htmltooltip = ''.$langs->trans("Name").': '.$module->name;
|
||||||
|
$htmltooltip .= '<br>'.$langs->trans("Type").': '.($module->type ? $module->type : $langs->trans("Unknown"));
|
||||||
|
if ($module->type == 'pdf') {
|
||||||
|
$htmltooltip .= '<br>'.$langs->trans("Width").'/'.$langs->trans("Height").': '.$module->page_largeur.'/'.$module->page_hauteur;
|
||||||
|
}
|
||||||
|
$htmltooltip .= '<br><br><u>'.$langs->trans("FeaturesSupported").':</u>';
|
||||||
|
$htmltooltip .= '<br>'.$langs->trans("Logo").': '.yn($module->option_logo, 1, 1);
|
||||||
|
$htmltooltip .= '<br>'.$langs->trans("MultiLanguage").': '.yn($module->option_multilang, 1, 1);
|
||||||
|
|
||||||
|
|
||||||
|
print '<td class="center">';
|
||||||
|
print $form->textwithpicto('', $htmltooltip, 1, 0);
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
|
// Preview
|
||||||
|
print '<td class="center">';
|
||||||
|
if ($module->type == 'pdf')
|
||||||
|
{
|
||||||
|
print '<a href="'.$_SERVER["PHP_SELF"].'?action=specimen&module='.$name.'">'.img_object($langs->trans("Preview"), 'contract').'</a>';
|
||||||
|
} else {
|
||||||
|
print img_object($langs->trans("PreviewNotAvailable"), 'generic');
|
||||||
|
}
|
||||||
|
print '</td>';
|
||||||
|
|
||||||
|
print "</tr>\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
print '</table>';
|
||||||
|
print "<br>";
|
||||||
|
|
||||||
print dol_get_fiche_end();
|
print dol_get_fiche_end();
|
||||||
|
|
||||||
|
|||||||
@ -134,8 +134,8 @@ echo $this->control->tpl['ajax_selectcountry'];
|
|||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="4" class="center">
|
<td colspan="4" class="center">
|
||||||
<input type="submit" class="button" name="save" value="<?php echo $langs->trans("Save"); ?>">
|
<input type="submit" class="button button-save" name="save" value="<?php echo $langs->trans("Save"); ?>">
|
||||||
<input type="submit" class="button" name="cancel" value="<?php echo $langs->trans("Cancel"); ?>">
|
<input type="submit" class="button button-cancel" name="cancel" value="<?php echo $langs->trans("Cancel"); ?>">
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
* Copyright (C) 2012 Marcos García <marcosgdf@gmail.com>
|
* Copyright (C) 2012 Marcos García <marcosgdf@gmail.com>
|
||||||
* Copyright (C) 2012-2020 Philippe Grand <philippe.grand@atoo-net.com>
|
* Copyright (C) 2012-2020 Philippe Grand <philippe.grand@atoo-net.com>
|
||||||
* Copyright (C) 2015-2018 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
* Copyright (C) 2015-2018 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||||
* Copyright (C) 2018 Frédéric France <frederic.france@netlogic.fr>
|
* Copyright (C) 2018-2020 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
|
||||||
* 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
|
||||||
@ -382,14 +382,12 @@ if (empty($reshook)) {
|
|||||||
if ($action == 'add' && $user->rights->adherent->creer) {
|
if ($action == 'add' && $user->rights->adherent->creer) {
|
||||||
if ($canvas) $object->canvas = $canvas;
|
if ($canvas) $object->canvas = $canvas;
|
||||||
$birthdate = '';
|
$birthdate = '';
|
||||||
if (isset($_POST["birthday"]) && $_POST["birthday"]
|
if (GETPOSTISSET("birthday") && GETPOST("birthday") && GETPOSTISSET("birthmonth") && GETPOST("birthmonth") && GETPOSTISSET("birthyear") && GETPOST("birthyear")) {
|
||||||
&& isset($_POST["birthmonth"]) && $_POST["birthmonth"]
|
$birthdate = dol_mktime(12, 0, 0, GETPOST("birthmonth", 'int'), GETPOST("birthday", 'int'), GETPOST("birthyear", 'int'));
|
||||||
&& isset($_POST["birthyear"]) && $_POST["birthyear"]) {
|
|
||||||
$birthdate = dol_mktime(12, 0, 0, $_POST["birthmonth"], $_POST["birthday"], $_POST["birthyear"]);
|
|
||||||
}
|
}
|
||||||
$datesubscription = '';
|
$datesubscription = '';
|
||||||
if (isset($_POST["reday"]) && isset($_POST["remonth"]) && isset($_POST["reyear"])) {
|
if (GETPOSTISSET("reday") && GETPOSTISSET("remonth") && GETPOSTISSET("reyear")) {
|
||||||
$datesubscription = dol_mktime(12, 0, 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]);
|
$datesubscription = dol_mktime(12, 0, 0, GETPOST("remonth", 'int'), GETPOST("reday", "int"), GETPOST("reyear", "int"));
|
||||||
}
|
}
|
||||||
|
|
||||||
$typeid = GETPOST("typeid", 'int');
|
$typeid = GETPOST("typeid", 'int');
|
||||||
@ -962,7 +960,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
|
|||||||
if (!empty($conf->categorie->enabled) && !empty($user->rights->categorie->lire)) {
|
if (!empty($conf->categorie->enabled) && !empty($user->rights->categorie->lire)) {
|
||||||
print '<tr><td>'.$form->editfieldkey("Categories", 'memcats', '', $object, 0).'</td><td>';
|
print '<tr><td>'.$form->editfieldkey("Categories", 'memcats', '', $object, 0).'</td><td>';
|
||||||
$cate_arbo = $form->select_all_categories(Categorie::TYPE_MEMBER, null, 'parent', null, null, 1);
|
$cate_arbo = $form->select_all_categories(Categorie::TYPE_MEMBER, null, 'parent', null, null, 1);
|
||||||
print $form->multiselectarray('memcats', $cate_arbo, GETPOST('memcats', 'array'), null, null, null, null, '100%');
|
print img_picto('', 'category').$form->multiselectarray('memcats', $cate_arbo, GETPOST('memcats', 'array'), null, null, 'quatrevingtpercent widthcentpercentminusx', 0, 0);
|
||||||
print "</td></tr>";
|
print "</td></tr>";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -978,9 +976,9 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
|
|||||||
print '<input type="submit" name="button" class="button" value="'.$langs->trans("AddMember").'">';
|
print '<input type="submit" name="button" class="button" value="'.$langs->trans("AddMember").'">';
|
||||||
print ' ';
|
print ' ';
|
||||||
if (!empty($backtopage)) {
|
if (!empty($backtopage)) {
|
||||||
print '<input type="submit" class="button" name="cancel" value="'.$langs->trans('Cancel').'">';
|
print '<input type="submit" class="button button-cancel" name="cancel" value="'.$langs->trans("Cancel").'">';
|
||||||
} else {
|
} else {
|
||||||
print '<input type="button" class="button" value="'.$langs->trans("Cancel").'" onClick="javascript:history.go(-1)">';
|
print '<input type="button" class="button button-cancel" value="'.$langs->trans("Cancel").'" onClick="javascript:history.go(-1)">';
|
||||||
}
|
}
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
|
||||||
@ -1066,7 +1064,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
|
|||||||
print '<table class="border centpercent">';
|
print '<table class="border centpercent">';
|
||||||
|
|
||||||
// Ref
|
// Ref
|
||||||
print '<tr><td class="titlefieldcreate">'.$langs->trans("Ref").'</td><td class="valeur">'.$object->id.'</td></tr>';
|
print '<tr><td class="titlefieldcreate">'.$langs->trans("Ref").'</td><td class="valeur">'.$object->ref.'</td></tr>';
|
||||||
|
|
||||||
// Login
|
// Login
|
||||||
if (empty($conf->global->ADHERENT_LOGIN_NOT_REQUIRED)) {
|
if (empty($conf->global->ADHERENT_LOGIN_NOT_REQUIRED)) {
|
||||||
@ -1075,7 +1073,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
|
|||||||
|
|
||||||
// Password
|
// Password
|
||||||
if (empty($conf->global->ADHERENT_LOGIN_NOT_REQUIRED)) {
|
if (empty($conf->global->ADHERENT_LOGIN_NOT_REQUIRED)) {
|
||||||
print '<tr><td class="fieldrequired">'.$langs->trans("Password").'</td><td><input type="password" name="pass" class="minwidth300" maxlength="50" value="'.(isset($_POST["pass"]) ?GETPOST("pass", '', 2) : $object->pass).'"></td></tr>';
|
print '<tr><td class="fieldrequired">'.$langs->trans("Password").'</td><td><input type="password" name="pass" class="minwidth300" maxlength="50" value="'.(GETPOSTISSET("pass") ? GETPOST("pass", '', 2) : $object->pass).'"></td></tr>';
|
||||||
}
|
}
|
||||||
// Morphy
|
// Morphy
|
||||||
$morphys["phy"] = $langs->trans("Physical");
|
$morphys["phy"] = $langs->trans("Physical");
|
||||||
@ -1134,7 +1132,7 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
|
|||||||
|
|
||||||
// EMail
|
// EMail
|
||||||
print '<tr><td>'.($conf->global->ADHERENT_MAIL_REQUIRED ? '<span class="fieldrequired">' : '').$langs->trans("EMail").($conf->global->ADHERENT_MAIL_REQUIRED ? '</span>' : '').'</td>';
|
print '<tr><td>'.($conf->global->ADHERENT_MAIL_REQUIRED ? '<span class="fieldrequired">' : '').$langs->trans("EMail").($conf->global->ADHERENT_MAIL_REQUIRED ? '</span>' : '').'</td>';
|
||||||
print '<td>'.img_picto('', 'object_email').' <input type="text" name="member_email" class="minwidth300" maxlength="255" value="'.(isset($_POST["member_email"]) ?GETPOST("member_email", '', 2) : $object->email).'"></td></tr>';
|
print '<td>'.img_picto('', 'object_email').' <input type="text" name="member_email" class="minwidth300" maxlength="255" value="'.(GETPOSTISSET("member_email") ? GETPOST("member_email", '', 2) : $object->email).'"></td></tr>';
|
||||||
|
|
||||||
// Address
|
// Address
|
||||||
print '<tr><td>'.$langs->trans("Address").'</td><td>';
|
print '<tr><td>'.$langs->trans("Address").'</td><td>';
|
||||||
@ -1151,14 +1149,14 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
|
|||||||
// Country
|
// Country
|
||||||
//$object->country_id=$object->country_id?$object->country_id:$mysoc->country_id; // In edit mode we don't force to company country if not defined
|
//$object->country_id=$object->country_id?$object->country_id:$mysoc->country_id; // In edit mode we don't force to company country if not defined
|
||||||
print '<tr><td>'.$langs->trans('Country').'</td><td>';
|
print '<tr><td>'.$langs->trans('Country').'</td><td>';
|
||||||
print $form->select_country(isset($_POST["country_id"]) ? $_POST["country_id"] : $object->country_id, 'country_id');
|
print $form->select_country(GETPOSTISSET("country_id") ? GETPOST("country_id", "alpha") : $object->country_id, 'country_id');
|
||||||
if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1);
|
if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1);
|
||||||
print '</td></tr>';
|
print '</td></tr>';
|
||||||
|
|
||||||
// State
|
// State
|
||||||
if (empty($conf->global->MEMBER_DISABLE_STATE)) {
|
if (empty($conf->global->MEMBER_DISABLE_STATE)) {
|
||||||
print '<tr><td>'.$langs->trans('State').'</td><td>';
|
print '<tr><td>'.$langs->trans('State').'</td><td>';
|
||||||
print $formcompany->select_state($object->state_id, isset($_POST["country_id"]) ?GETPOST("country_id") : $object->country_id);
|
print $formcompany->select_state($object->state_id, GETPOSTISSET("country_id") ? GETPOST("country_id", "alpha") : $object->country_id);
|
||||||
print '</td></tr>';
|
print '</td></tr>';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1235,9 +1233,9 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
|
|||||||
print dol_get_fiche_end();
|
print dol_get_fiche_end();
|
||||||
|
|
||||||
print '<div class="center">';
|
print '<div class="center">';
|
||||||
print '<input type="submit" class="button" name="save" value="'.$langs->trans("Save").'">';
|
print '<input type="submit" class="button button-save" name="save" value="'.$langs->trans("Save").'">';
|
||||||
print ' ';
|
print ' ';
|
||||||
print '<input type="submit" class="button" name="cancel" value="'.$langs->trans("Cancel").'">';
|
print '<input type="submit" class="button button-cancel" name="cancel" value="'.$langs->trans("Cancel").'">';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
|
||||||
print '</form>';
|
print '</form>';
|
||||||
@ -1564,7 +1562,9 @@ if (is_object($objcanvas) && $objcanvas->displayCanvasExists($action)) {
|
|||||||
$form->form_users($_SERVER['PHP_SELF'].'?rowid='.$object->id, $object->user_id, 'userid', '');
|
$form->form_users($_SERVER['PHP_SELF'].'?rowid='.$object->id, $object->user_id, 'userid', '');
|
||||||
} else {
|
} else {
|
||||||
if ($object->user_id) {
|
if ($object->user_id) {
|
||||||
$form->form_users($_SERVER['PHP_SELF'].'?rowid='.$object->id, $object->user_id, 'none');
|
$linkeduser = new User($db);
|
||||||
|
$linkeduser->fetch($object->user_id);
|
||||||
|
print $linkeduser->getNomUrl(-1);
|
||||||
} else {
|
} else {
|
||||||
print $langs->trans("NoDolibarrAccess");
|
print $langs->trans("NoDolibarrAccess");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -63,19 +63,24 @@ if ((!empty($foruserid) || !empty($foruserlogin) || !empty($mode)) && !$mesg) {
|
|||||||
$arrayofmembers = array();
|
$arrayofmembers = array();
|
||||||
|
|
||||||
// request taking into account member with up to date subscriptions
|
// request taking into account member with up to date subscriptions
|
||||||
$sql = "SELECT d.rowid, d.firstname, d.lastname, d.login, d.societe as company, d.datefin,";
|
$sql = "SELECT d.rowid, d.ref, d.firstname, d.lastname, d.login, d.societe as company, d.datefin,";
|
||||||
$sql .= " d.address, d.zip, d.town, d.country, d.birth, d.email, d.photo,";
|
$sql .= " d.address, d.zip, d.town, d.country, d.birth, d.email, d.photo,";
|
||||||
$sql .= " t.libelle as type,";
|
$sql .= " t.libelle as type,";
|
||||||
$sql .= " c.code as country_code, c.label as country";
|
$sql .= " c.code as country_code, c.label as country";
|
||||||
// Add fields from extrafields
|
// Add fields from extrafields
|
||||||
if (!empty($extrafields->attributes[$object->table_element]['label']))
|
if (!empty($extrafields->attributes[$object->table_element]['label'])) {
|
||||||
foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) $sql .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key.' as options_'.$key : '');
|
foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) {
|
||||||
|
$sql .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key.' as options_'.$key : '');
|
||||||
|
}
|
||||||
|
}
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."adherent_type as t, ".MAIN_DB_PREFIX."adherent as d";
|
$sql .= " FROM ".MAIN_DB_PREFIX."adherent_type as t, ".MAIN_DB_PREFIX."adherent as d";
|
||||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON d.country = c.rowid";
|
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as c ON d.country = c.rowid";
|
||||||
if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."adherent_extrafields as ef on (d.rowid = ef.fk_object)";
|
if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) {
|
||||||
|
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."adherent_extrafields as ef on (d.rowid = ef.fk_object)";
|
||||||
|
}
|
||||||
$sql .= " WHERE d.fk_adherent_type = t.rowid AND d.statut = 1";
|
$sql .= " WHERE d.fk_adherent_type = t.rowid AND d.statut = 1";
|
||||||
$sql .= " AND d.entity IN (".getEntity('adherent').")";
|
$sql .= " AND d.entity IN (".getEntity('adherent').")";
|
||||||
if (is_numeric($foruserid)) $sql .= " AND d.rowid=".$foruserid;
|
if (is_numeric($foruserid)) $sql .= " AND d.rowid=".(int) $foruserid;
|
||||||
if ($foruserlogin) $sql .= " AND d.login='".$db->escape($foruserlogin)."'";
|
if ($foruserlogin) $sql .= " AND d.login='".$db->escape($foruserlogin)."'";
|
||||||
$sql .= " ORDER BY d.rowid ASC";
|
$sql .= " ORDER BY d.rowid ASC";
|
||||||
|
|
||||||
@ -90,6 +95,7 @@ if ((!empty($foruserid) || !empty($foruserlogin) || !empty($mode)) && !$mesg) {
|
|||||||
if ($objp->country == '-') $objp->country = '';
|
if ($objp->country == '-') $objp->country = '';
|
||||||
|
|
||||||
$adherentstatic->id = $objp->rowid;
|
$adherentstatic->id = $objp->rowid;
|
||||||
|
$adherentstatic->ref = $objp->ref;
|
||||||
$adherentstatic->lastname = $objp->lastname;
|
$adherentstatic->lastname = $objp->lastname;
|
||||||
$adherentstatic->firstname = $objp->firstname;
|
$adherentstatic->firstname = $objp->firstname;
|
||||||
|
|
||||||
@ -110,6 +116,7 @@ if ((!empty($foruserid) || !empty($foruserlogin) || !empty($mode)) && !$mesg) {
|
|||||||
// List of values to scan for a replacement
|
// List of values to scan for a replacement
|
||||||
$substitutionarray = array(
|
$substitutionarray = array(
|
||||||
'__ID__'=>$objp->rowid,
|
'__ID__'=>$objp->rowid,
|
||||||
|
'__REF__'=>$objp->ref,
|
||||||
'__LOGIN__'=>$objp->login,
|
'__LOGIN__'=>$objp->login,
|
||||||
'__FIRSTNAME__'=>$objp->firstname,
|
'__FIRSTNAME__'=>$objp->firstname,
|
||||||
'__LASTNAME__'=>$objp->lastname,
|
'__LASTNAME__'=>$objp->lastname,
|
||||||
@ -149,6 +156,7 @@ if ((!empty($foruserid) || !empty($foruserlogin) || !empty($mode)) && !$mesg) {
|
|||||||
'textfooter'=>$textfooter,
|
'textfooter'=>$textfooter,
|
||||||
'textright'=>$textright,
|
'textright'=>$textright,
|
||||||
'id'=>$objp->rowid,
|
'id'=>$objp->rowid,
|
||||||
|
'ref'=>$objp->ref,
|
||||||
'photo'=>$objp->photo
|
'photo'=>$objp->photo
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -159,6 +167,7 @@ if ((!empty($foruserid) || !empty($foruserlogin) || !empty($mode)) && !$mesg) {
|
|||||||
'textfooter'=>$textfooter,
|
'textfooter'=>$textfooter,
|
||||||
'textright'=>$textright,
|
'textright'=>$textright,
|
||||||
'id'=>$objp->rowid,
|
'id'=>$objp->rowid,
|
||||||
|
'ref'=>$objp->ref,
|
||||||
'photo'=>$objp->photo
|
'photo'=>$objp->photo
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -172,12 +181,15 @@ if ((!empty($foruserid) || !empty($foruserlogin) || !empty($mode)) && !$mesg) {
|
|||||||
$textfooter = '';
|
$textfooter = '';
|
||||||
$textright = '';
|
$textright = '';
|
||||||
|
|
||||||
$arrayofmembers[] = array('textleft'=>$textleft,
|
$arrayofmembers[] = array(
|
||||||
'textheader'=>$textheader,
|
'textleft'=>$textleft,
|
||||||
'textfooter'=>$textfooter,
|
'textheader'=>$textheader,
|
||||||
'textright'=>$textright,
|
'textfooter'=>$textfooter,
|
||||||
'id'=>$objp->rowid,
|
'textright'=>$textright,
|
||||||
'photo'=>$objp->photo);
|
'id'=>$objp->rowid,
|
||||||
|
'ref'=>$objp->ref,
|
||||||
|
'photo'=>$objp->photo,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$i++;
|
$i++;
|
||||||
|
|||||||
@ -79,8 +79,8 @@ class Adherent extends CommonObject
|
|||||||
public $pass;
|
public $pass;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string Clear password in database (defined if DATABASE_PWD_ENCRYPTED=0)
|
* @var string Clear password in database (defined if DATABASE_PWD_ENCRYPTED=0)
|
||||||
*/
|
*/
|
||||||
public $pass_indatabase;
|
public $pass_indatabase;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -103,6 +103,7 @@ class Adherent extends CommonObject
|
|||||||
* @var int Thirdparty ID
|
* @var int Thirdparty ID
|
||||||
*/
|
*/
|
||||||
public $fk_soc;
|
public $fk_soc;
|
||||||
|
public $socid;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string Address
|
* @var string Address
|
||||||
@ -287,6 +288,7 @@ class Adherent extends CommonObject
|
|||||||
*/
|
*/
|
||||||
public $fields = array(
|
public $fields = array(
|
||||||
'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'position' => 10),
|
'rowid' => array('type' => 'integer', 'label' => 'TechnicalID', 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'position' => 10),
|
||||||
|
'ref' => array('type' => 'varchar(30)', 'label' => 'Ref', 'default' => 1, 'enabled' => 1, 'visible' => -1, 'notnull' => 1, 'position' => 12, 'index' => 1),
|
||||||
'entity' => array('type' => 'integer', 'label' => 'Entity', 'default' => 1, 'enabled' => 1, 'visible' => -2, 'notnull' => 1, 'position' => 15, 'index' => 1),
|
'entity' => array('type' => 'integer', 'label' => 'Entity', 'default' => 1, 'enabled' => 1, 'visible' => -2, 'notnull' => 1, 'position' => 15, 'index' => 1),
|
||||||
'ref_ext' => array('type' => 'varchar(128)', 'label' => 'Ref ext', 'enabled' => 1, 'visible' => 0, 'position' => 20),
|
'ref_ext' => array('type' => 'varchar(128)', 'label' => 'Ref ext', 'enabled' => 1, 'visible' => 0, 'position' => 20),
|
||||||
'civility' => array('type' => 'varchar(6)', 'label' => 'Civility', 'enabled' => 1, 'visible' => -1, 'position' => 25),
|
'civility' => array('type' => 'varchar(6)', 'label' => 'Civility', 'enabled' => 1, 'visible' => -1, 'position' => 25),
|
||||||
@ -416,6 +418,7 @@ class Adherent extends CommonObject
|
|||||||
$infos = '';
|
$infos = '';
|
||||||
if ($this->civility_id) $infos .= $langs->transnoentities("UserTitle").": ".$this->getCivilityLabel()."\n";
|
if ($this->civility_id) $infos .= $langs->transnoentities("UserTitle").": ".$this->getCivilityLabel()."\n";
|
||||||
$infos .= $langs->transnoentities("id").": ".$this->id."\n";
|
$infos .= $langs->transnoentities("id").": ".$this->id."\n";
|
||||||
|
$infos .= $langs->transnoentities("ref").": ".$this->ref."\n";
|
||||||
$infos .= $langs->transnoentities("Lastname").": ".$this->lastname."\n";
|
$infos .= $langs->transnoentities("Lastname").": ".$this->lastname."\n";
|
||||||
$infos .= $langs->transnoentities("Firstname").": ".$this->firstname."\n";
|
$infos .= $langs->transnoentities("Firstname").": ".$this->firstname."\n";
|
||||||
$infos .= $langs->transnoentities("Company").": ".$this->company."\n";
|
$infos .= $langs->transnoentities("Company").": ".$this->company."\n";
|
||||||
@ -437,15 +440,20 @@ class Adherent extends CommonObject
|
|||||||
|
|
||||||
// Substitutions
|
// Substitutions
|
||||||
$substitutionarray = array(
|
$substitutionarray = array(
|
||||||
'__ID__' => $this->id, '__MEMBER_ID__' => $this->id, '__CIVILITY__' => $this->getCivilityLabel(),
|
'__ID__' => $this->id,
|
||||||
|
'__REF__' => $this->ref,
|
||||||
|
'__MEMBER_ID__' => $this->id,
|
||||||
|
'__CIVILITY__' => $this->getCivilityLabel(),
|
||||||
'__FIRSTNAME__' => $msgishtml ? dol_htmlentitiesbr($this->firstname) : ($this->firstname ? $this->firstname : ''),
|
'__FIRSTNAME__' => $msgishtml ? dol_htmlentitiesbr($this->firstname) : ($this->firstname ? $this->firstname : ''),
|
||||||
'__LASTNAME__' => $msgishtml ? dol_htmlentitiesbr($this->lastname) : ($this->lastname ? $this->lastname : ''),
|
'__LASTNAME__' => $msgishtml ? dol_htmlentitiesbr($this->lastname) : ($this->lastname ? $this->lastname : ''),
|
||||||
'__FULLNAME__' => $msgishtml ? dol_htmlentitiesbr($this->getFullName($langs)) : $this->getFullName($langs),
|
'__FULLNAME__' => $msgishtml ? dol_htmlentitiesbr($this->getFullName($langs)) : $this->getFullName($langs),
|
||||||
'__COMPANY__' => $msgishtml ? dol_htmlentitiesbr($this->company) : ($this->company ? $this->company : ''),
|
'__COMPANY__' => $msgishtml ? dol_htmlentitiesbr($this->company) : ($this->company ? $this->company : ''),
|
||||||
'__ADDRESS__' => $msgishtml ? dol_htmlentitiesbr($this->address) : ($this->address ? $this->address : ''),
|
'__ADDRESS__' => $msgishtml ? dol_htmlentitiesbr($this->address) : ($this->address ? $this->address : ''),
|
||||||
'__ZIP__' => $msgishtml ? dol_htmlentitiesbr($this->zip) : ($this->zip ? $this->zip : ''), '__TOWN__' => $msgishtml ? dol_htmlentitiesbr($this->town) : ($this->town ? $this->town : ''),
|
'__ZIP__' => $msgishtml ? dol_htmlentitiesbr($this->zip) : ($this->zip ? $this->zip : ''),
|
||||||
|
'__TOWN__' => $msgishtml ? dol_htmlentitiesbr($this->town) : ($this->town ? $this->town : ''),
|
||||||
'__COUNTRY__' => $msgishtml ? dol_htmlentitiesbr($this->country) : ($this->country ? $this->country : ''),
|
'__COUNTRY__' => $msgishtml ? dol_htmlentitiesbr($this->country) : ($this->country ? $this->country : ''),
|
||||||
'__EMAIL__' => $msgishtml ? dol_htmlentitiesbr($this->email) : ($this->email ? $this->email : ''), '__BIRTH__' => $msgishtml ? dol_htmlentitiesbr($birthday) : ($birthday ? $birthday : ''),
|
'__EMAIL__' => $msgishtml ? dol_htmlentitiesbr($this->email) : ($this->email ? $this->email : ''),
|
||||||
|
'__BIRTH__' => $msgishtml ? dol_htmlentitiesbr($birthday) : ($birthday ? $birthday : ''),
|
||||||
'__PHOTO__' => $msgishtml ? dol_htmlentitiesbr($this->photo) : ($this->photo ? $this->photo : ''),
|
'__PHOTO__' => $msgishtml ? dol_htmlentitiesbr($this->photo) : ($this->photo ? $this->photo : ''),
|
||||||
'__LOGIN__' => $msgishtml ? dol_htmlentitiesbr($this->login) : ($this->login ? $this->login : ''),
|
'__LOGIN__' => $msgishtml ? dol_htmlentitiesbr($this->login) : ($this->login ? $this->login : ''),
|
||||||
'__PASSWORD__' => $msgishtml ? dol_htmlentitiesbr($this->pass) : ($this->pass ? $this->pass : ''),
|
'__PASSWORD__' => $msgishtml ? dol_htmlentitiesbr($this->pass) : ($this->pass ? $this->pass : ''),
|
||||||
@ -518,9 +526,10 @@ class Adherent extends CommonObject
|
|||||||
|
|
||||||
// Insert member
|
// Insert member
|
||||||
$sql = "INSERT INTO ".MAIN_DB_PREFIX."adherent";
|
$sql = "INSERT INTO ".MAIN_DB_PREFIX."adherent";
|
||||||
$sql .= " (datec,login,fk_user_author,fk_user_mod,fk_user_valid,morphy,fk_adherent_type,entity,import_key)";
|
$sql .= " (ref, datec,login,fk_user_author,fk_user_mod,fk_user_valid,morphy,fk_adherent_type,entity,import_key)";
|
||||||
$sql .= " VALUES (";
|
$sql .= " VALUES (";
|
||||||
$sql .= " '".$this->db->idate($this->datec)."'";
|
$sql .= " '(PROV)'";
|
||||||
|
$sql .= ", '".$this->db->idate($this->datec)."'";
|
||||||
$sql .= ", ".($this->login ? "'".$this->db->escape($this->login)."'" : "null");
|
$sql .= ", ".($this->login ? "'".$this->db->escape($this->login)."'" : "null");
|
||||||
$sql .= ", ".($user->id > 0 ? $user->id : "null"); // Can be null because member can be created by a guest or a script
|
$sql .= ", ".($user->id > 0 ? $user->id : "null"); // Can be null because member can be created by a guest or a script
|
||||||
$sql .= ", null, null, '".$this->db->escape($this->morphy)."'";
|
$sql .= ", null, null, '".$this->db->escape($this->morphy)."'";
|
||||||
@ -634,7 +643,8 @@ class Adherent extends CommonObject
|
|||||||
$this->db->begin();
|
$this->db->begin();
|
||||||
|
|
||||||
$sql = "UPDATE ".MAIN_DB_PREFIX."adherent SET";
|
$sql = "UPDATE ".MAIN_DB_PREFIX."adherent SET";
|
||||||
$sql .= " civility = ".($this->civility_id ? "'".$this->db->escape($this->civility_id)."'" : "null");
|
$sql .= " ref = '".$this->db->escape($this->ref)."'";
|
||||||
|
$sql .= ", civility = ".($this->civility_id ? "'".$this->db->escape($this->civility_id)."'" : "null");
|
||||||
$sql .= ", firstname = ".($this->firstname ? "'".$this->db->escape($this->firstname)."'" : "null");
|
$sql .= ", firstname = ".($this->firstname ? "'".$this->db->escape($this->firstname)."'" : "null");
|
||||||
$sql .= ", lastname = ".($this->lastname ? "'".$this->db->escape($this->lastname)."'" : "null");
|
$sql .= ", lastname = ".($this->lastname ? "'".$this->db->escape($this->lastname)."'" : "null");
|
||||||
$sql .= ", gender = ".($this->gender != -1 ? "'".$this->db->escape($this->gender)."'" : "null"); // 'man' or 'woman'
|
$sql .= ", gender = ".($this->gender != -1 ? "'".$this->db->escape($this->gender)."'" : "null"); // 'man' or 'woman'
|
||||||
@ -751,6 +761,7 @@ class Adherent extends CommonObject
|
|||||||
// If option ADHERENT_LOGIN_NOT_REQUIRED is on, there is no login of member, so we do not overwrite user login to keep existing one.
|
// If option ADHERENT_LOGIN_NOT_REQUIRED is on, there is no login of member, so we do not overwrite user login to keep existing one.
|
||||||
if (empty($conf->global->ADHERENT_LOGIN_NOT_REQUIRED)) $luser->login = $this->login;
|
if (empty($conf->global->ADHERENT_LOGIN_NOT_REQUIRED)) $luser->login = $this->login;
|
||||||
|
|
||||||
|
$luser->ref = $this->ref;
|
||||||
$luser->civility_id = $this->civility_id;
|
$luser->civility_id = $this->civility_id;
|
||||||
$luser->firstname = $this->firstname;
|
$luser->firstname = $this->firstname;
|
||||||
$luser->lastname = $this->lastname;
|
$luser->lastname = $this->lastname;
|
||||||
@ -1241,7 +1252,8 @@ class Adherent extends CommonObject
|
|||||||
{
|
{
|
||||||
global $langs;
|
global $langs;
|
||||||
|
|
||||||
$sql = "SELECT d.rowid, d.ref_ext, d.civility as civility_code, d.gender, d.firstname, d.lastname, d.societe as company, d.fk_soc, d.statut, d.public, d.address, d.zip, d.town, d.note_private,";
|
$sql = "SELECT d.rowid, d.ref, d.ref_ext, d.civility as civility_code, d.gender, d.firstname, d.lastname,";
|
||||||
|
$sql .= " d.societe as company, d.fk_soc, d.statut, d.public, d.address, d.zip, d.town, d.note_private,";
|
||||||
$sql .= " d.note_public,";
|
$sql .= " d.note_public,";
|
||||||
$sql .= " d.email, d.socialnetworks, d.phone, d.phone_perso, d.phone_mobile, d.login, d.pass, d.pass_crypted,";
|
$sql .= " d.email, d.socialnetworks, d.phone, d.phone_perso, d.phone_mobile, d.login, d.pass, d.pass_crypted,";
|
||||||
$sql .= " d.photo, d.fk_adherent_type, d.morphy, d.entity,";
|
$sql .= " d.photo, d.fk_adherent_type, d.morphy, d.entity,";
|
||||||
@ -1262,14 +1274,15 @@ class Adherent extends CommonObject
|
|||||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_departements as dep ON d.state_id = dep.rowid";
|
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_departements as dep ON d.state_id = dep.rowid";
|
||||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user as u ON d.rowid = u.fk_member";
|
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user as u ON d.rowid = u.fk_member";
|
||||||
$sql .= " WHERE d.fk_adherent_type = t.rowid";
|
$sql .= " WHERE d.fk_adherent_type = t.rowid";
|
||||||
if ($rowid)
|
if ($rowid) {
|
||||||
$sql .= " AND d.rowid=".$rowid;
|
$sql .= " AND d.rowid=".((int) $rowid);
|
||||||
elseif ($ref || $fk_soc) {
|
} elseif ($ref || $fk_soc) {
|
||||||
$sql .= " AND d.entity IN (".getEntity('adherent').")";
|
$sql .= " AND d.entity IN (".getEntity('adherent').")";
|
||||||
if ($ref)
|
if ($ref) {
|
||||||
$sql .= " AND d.rowid='".$this->db->escape($ref)."'";
|
$sql .= " AND d.ref='".$this->db->escape($ref)."'";
|
||||||
elseif ($fk_soc > 0)
|
} elseif ($fk_soc > 0) {
|
||||||
$sql .= " AND d.fk_soc=".$fk_soc;
|
$sql .= " AND d.fk_soc=".((int) $fk_soc);
|
||||||
|
}
|
||||||
} elseif ($ref_ext) {
|
} elseif ($ref_ext) {
|
||||||
$sql .= " AND d.ref_ext='".$this->db->escape($ref_ext)."'";
|
$sql .= " AND d.ref_ext='".$this->db->escape($ref_ext)."'";
|
||||||
}
|
}
|
||||||
@ -1281,8 +1294,8 @@ class Adherent extends CommonObject
|
|||||||
$obj = $this->db->fetch_object($resql);
|
$obj = $this->db->fetch_object($resql);
|
||||||
|
|
||||||
$this->entity = $obj->entity;
|
$this->entity = $obj->entity;
|
||||||
$this->ref = $obj->rowid;
|
|
||||||
$this->id = $obj->rowid;
|
$this->id = $obj->rowid;
|
||||||
|
$this->ref = $obj->ref;
|
||||||
$this->ref_ext = $obj->ref_ext;
|
$this->ref_ext = $obj->ref_ext;
|
||||||
|
|
||||||
$this->civility_id = $obj->civility_code; // Bad. Kept for backard compatibility
|
$this->civility_id = $obj->civility_code; // Bad. Kept for backard compatibility
|
||||||
@ -1988,11 +2001,11 @@ class Adherent extends CommonObject
|
|||||||
* @param int $withpictoimg 0=No picto, 1=Include picto into link, 2=Only picto, -1=Include photo into link, -2=Only picto photo, -3=Only photo very small)
|
* @param int $withpictoimg 0=No picto, 1=Include picto into link, 2=Only picto, -1=Include photo into link, -2=Only picto photo, -3=Only photo very small)
|
||||||
* @param int $maxlen length max label
|
* @param int $maxlen length max label
|
||||||
* @param string $option Page for link ('card', 'category', 'subscription', ...)
|
* @param string $option Page for link ('card', 'category', 'subscription', ...)
|
||||||
* @param string $mode ''=Show firstname+lastname as label (using default order), 'firstname'=Show only firstname, 'login'=Show login, 'ref'=Show ref
|
* @param string $mode ''=Show firstname+lastname as label (using default order), 'firstname'=Show only firstname, 'lastname'=Show only lastname, 'login'=Show login, 'ref'=Show ref
|
||||||
* @param string $morecss Add more css on link
|
* @param string $morecss Add more css on link
|
||||||
* @param int $save_lastsearch_value -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking
|
* @param int $save_lastsearch_value -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking
|
||||||
* @param int $notooltip 1=Disable tooltip
|
* @param int $notooltip 1=Disable tooltip
|
||||||
* @param int $addlinktonotes 1=Add link to notes
|
* @param int $addlinktonotes 1=Add link to notes
|
||||||
* @return string Chaine avec URL
|
* @return string Chaine avec URL
|
||||||
*/
|
*/
|
||||||
public function getNomUrl($withpictoimg = 0, $maxlen = 0, $option = 'card', $mode = '', $morecss = '', $save_lastsearch_value = -1, $notooltip = 0, $addlinktonotes = 0)
|
public function getNomUrl($withpictoimg = 0, $maxlen = 0, $option = 'card', $mode = '', $morecss = '', $save_lastsearch_value = -1, $notooltip = 0, $addlinktonotes = 0)
|
||||||
@ -2070,9 +2083,9 @@ class Adherent extends CommonObject
|
|||||||
if ($mode == 'login') {
|
if ($mode == 'login') {
|
||||||
$result .= dol_trunc($this->login, $maxlen);
|
$result .= dol_trunc($this->login, $maxlen);
|
||||||
} elseif ($mode == 'ref') {
|
} elseif ($mode == 'ref') {
|
||||||
$result .= $this->id;
|
$result .= $this->ref;
|
||||||
} else {
|
} else {
|
||||||
$result .= $this->getFullName($langs, '', ($mode == 'firstname' ? 2 : -1), $maxlen);
|
$result .= $this->getFullName($langs, '', ($mode == 'firstname' ? 2 : ($mode == 'lastname' ? 4 : -1)), $maxlen);
|
||||||
}
|
}
|
||||||
if (empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) $result .= '</span>';
|
if (empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) $result .= '</span>';
|
||||||
}
|
}
|
||||||
@ -2315,6 +2328,7 @@ class Adherent extends CommonObject
|
|||||||
|
|
||||||
// Initialise parametres
|
// Initialise parametres
|
||||||
$this->id = 0;
|
$this->id = 0;
|
||||||
|
$this->ref = 'ABC001';
|
||||||
$this->entity = 1;
|
$this->entity = 1;
|
||||||
$this->specimen = 1;
|
$this->specimen = 1;
|
||||||
$this->civility_id = 0;
|
$this->civility_id = 0;
|
||||||
@ -2404,6 +2418,7 @@ class Adherent extends CommonObject
|
|||||||
global $conf, $langs;
|
global $conf, $langs;
|
||||||
|
|
||||||
$info = array();
|
$info = array();
|
||||||
|
$socialnetworks = getArrayOfSocialNetworks();
|
||||||
$keymodified = false;
|
$keymodified = false;
|
||||||
|
|
||||||
// Object classes
|
// Object classes
|
||||||
@ -2418,8 +2433,13 @@ class Adherent extends CommonObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Possible LDAP KEY (constname => varname)
|
// Possible LDAP KEY (constname => varname)
|
||||||
$ldapkey = array('LDAP_MEMBER_FIELD_FULLNAME' => 'fullname', 'LDAP_MEMBER_FIELD_NAME' => 'lastname', 'LDAP_MEMBER_FIELD_LOGIN' => 'login', 'LDAP_MEMBER_FIELD_LOGIN_SAMBA' => 'login',
|
$ldapkey = array(
|
||||||
'LDAP_MEMBER_FIELD_MAIL' => 'email');
|
'LDAP_MEMBER_FIELD_FULLNAME' => 'fullname',
|
||||||
|
'LDAP_MEMBER_FIELD_NAME' => 'lastname',
|
||||||
|
'LDAP_MEMBER_FIELD_LOGIN' => 'login',
|
||||||
|
'LDAP_MEMBER_FIELD_LOGIN_SAMBA' => 'login',
|
||||||
|
'LDAP_MEMBER_FIELD_MAIL' => 'email'
|
||||||
|
);
|
||||||
|
|
||||||
// Member
|
// Member
|
||||||
foreach ($ldapkey as $constname => $varname) {
|
foreach ($ldapkey as $constname => $varname) {
|
||||||
@ -2439,10 +2459,11 @@ class Adherent extends CommonObject
|
|||||||
if ($this->zip && !empty($conf->global->LDAP_MEMBER_FIELD_ZIP)) $info[$conf->global->LDAP_MEMBER_FIELD_ZIP] = $this->zip;
|
if ($this->zip && !empty($conf->global->LDAP_MEMBER_FIELD_ZIP)) $info[$conf->global->LDAP_MEMBER_FIELD_ZIP] = $this->zip;
|
||||||
if ($this->town && !empty($conf->global->LDAP_MEMBER_FIELD_TOWN)) $info[$conf->global->LDAP_MEMBER_FIELD_TOWN] = $this->town;
|
if ($this->town && !empty($conf->global->LDAP_MEMBER_FIELD_TOWN)) $info[$conf->global->LDAP_MEMBER_FIELD_TOWN] = $this->town;
|
||||||
if ($this->country_code && !empty($conf->global->LDAP_MEMBER_FIELD_COUNTRY)) $info[$conf->global->LDAP_MEMBER_FIELD_COUNTRY] = $this->country_code;
|
if ($this->country_code && !empty($conf->global->LDAP_MEMBER_FIELD_COUNTRY)) $info[$conf->global->LDAP_MEMBER_FIELD_COUNTRY] = $this->country_code;
|
||||||
if ($this->skype && !empty($conf->global->LDAP_MEMBER_FIELD_SKYPE)) $info[$conf->global->LDAP_MEMBER_FIELD_SKYPE] = $this->skype;
|
foreach ($socialnetworks as $key => $value) {
|
||||||
if ($this->twitter && !empty($conf->global->LDAP_MEMBER_FIELD_TWITTER)) $info[$conf->global->LDAP_MEMBER_FIELD_TWITTER] = $this->twitter;
|
if ($this->socialnetworks[$value['label']] && !empty($conf->global->{'LDAP_MEMBER_FIELD_'.strtoupper($value['label'])})) {
|
||||||
if ($this->facebook && !empty($conf->global->LDAP_MEMBER_FIELD_FACEBOOK)) $info[$conf->global->LDAP_MEMBER_FIELD_FACEBOOK] = $this->facebook;
|
$info[$conf->global->{'LDAP_MEMBER_FIELD_'.strtoupper($value['label'])}] = $this->socialnetworks[$value['label']];
|
||||||
if ($this->linkedin && !empty($conf->global->LDAP_MEMBER_FIELD_LINKEDIN)) $info[$conf->global->LDAP_MEMBER_FIELD_LINKEDIN] = $this->linkedin;
|
}
|
||||||
|
}
|
||||||
if ($this->phone && !empty($conf->global->LDAP_MEMBER_FIELD_PHONE)) $info[$conf->global->LDAP_MEMBER_FIELD_PHONE] = $this->phone;
|
if ($this->phone && !empty($conf->global->LDAP_MEMBER_FIELD_PHONE)) $info[$conf->global->LDAP_MEMBER_FIELD_PHONE] = $this->phone;
|
||||||
if ($this->phone_perso && !empty($conf->global->LDAP_MEMBER_FIELD_PHONE_PERSO)) $info[$conf->global->LDAP_MEMBER_FIELD_PHONE_PERSO] = $this->phone_perso;
|
if ($this->phone_perso && !empty($conf->global->LDAP_MEMBER_FIELD_PHONE_PERSO)) $info[$conf->global->LDAP_MEMBER_FIELD_PHONE_PERSO] = $this->phone_perso;
|
||||||
if ($this->phone_mobile && !empty($conf->global->LDAP_MEMBER_FIELD_MOBILE)) $info[$conf->global->LDAP_MEMBER_FIELD_MOBILE] = $this->phone_mobile;
|
if ($this->phone_mobile && !empty($conf->global->LDAP_MEMBER_FIELD_MOBILE)) $info[$conf->global->LDAP_MEMBER_FIELD_MOBILE] = $this->phone_mobile;
|
||||||
@ -2455,8 +2476,12 @@ class Adherent extends CommonObject
|
|||||||
|
|
||||||
// When password is modified
|
// When password is modified
|
||||||
if (!empty($this->pass)) {
|
if (!empty($this->pass)) {
|
||||||
if (!empty($conf->global->LDAP_MEMBER_FIELD_PASSWORD)) $info[$conf->global->LDAP_MEMBER_FIELD_PASSWORD] = $this->pass; // this->pass = mot de passe non crypte
|
if (!empty($conf->global->LDAP_MEMBER_FIELD_PASSWORD)) {
|
||||||
if (!empty($conf->global->LDAP_MEMBER_FIELD_PASSWORD_CRYPTED)) $info[$conf->global->LDAP_MEMBER_FIELD_PASSWORD_CRYPTED] = dol_hash($this->pass, 4); // Create OpenLDAP MD5 password (TODO add type of encryption)
|
$info[$conf->global->LDAP_MEMBER_FIELD_PASSWORD] = $this->pass; // this->pass = mot de passe non crypte
|
||||||
|
}
|
||||||
|
if (!empty($conf->global->LDAP_MEMBER_FIELD_PASSWORD_CRYPTED)) {
|
||||||
|
$info[$conf->global->LDAP_MEMBER_FIELD_PASSWORD_CRYPTED] = dol_hash($this->pass, 4); // Create OpenLDAP MD5 password (TODO add type of encryption)
|
||||||
|
}
|
||||||
} // Set LDAP password if possible
|
} // Set LDAP password if possible
|
||||||
elseif ($conf->global->LDAP_SERVER_PROTOCOLVERSION !== '3') { // If ldap key is modified and LDAPv3 we use ldap_rename function for avoid lose encrypt password
|
elseif ($conf->global->LDAP_SERVER_PROTOCOLVERSION !== '3') { // If ldap key is modified and LDAPv3 we use ldap_rename function for avoid lose encrypt password
|
||||||
if (!empty($conf->global->DATABASE_PWD_ENCRYPTED)) {
|
if (!empty($conf->global->DATABASE_PWD_ENCRYPTED)) {
|
||||||
|
|||||||
@ -52,7 +52,7 @@ class Subscriptions extends DolibarrApi
|
|||||||
* Return an array with subscription informations
|
* Return an array with subscription informations
|
||||||
*
|
*
|
||||||
* @param int $id ID of subscription
|
* @param int $id ID of subscription
|
||||||
* @return array|mixed data without useless information
|
* @return Object data without useless information
|
||||||
*
|
*
|
||||||
* @throws RestException
|
* @throws RestException
|
||||||
*/
|
*/
|
||||||
@ -168,7 +168,7 @@ class Subscriptions extends DolibarrApi
|
|||||||
*
|
*
|
||||||
* @param int $id ID of subscription to update
|
* @param int $id ID of subscription to update
|
||||||
* @param array $request_data Datas
|
* @param array $request_data Datas
|
||||||
* @return int
|
* @return Object
|
||||||
*/
|
*/
|
||||||
public function put($id, $request_data = null)
|
public function put($id, $request_data = null)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -250,11 +250,16 @@ class Subscription extends CommonObject
|
|||||||
|
|
||||||
$this->db->begin();
|
$this->db->begin();
|
||||||
|
|
||||||
|
if (!is_numeric($this->amount)) {
|
||||||
|
$this->error = 'BadValueForParameterAmount';
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
$sql = "UPDATE ".MAIN_DB_PREFIX."subscription SET ";
|
$sql = "UPDATE ".MAIN_DB_PREFIX."subscription SET ";
|
||||||
$sql .= " fk_type = ".$this->fk_type.",";
|
$sql .= " fk_type = ".$this->fk_type.",";
|
||||||
$sql .= " fk_adherent = ".$this->fk_adherent.",";
|
$sql .= " fk_adherent = ".$this->fk_adherent.",";
|
||||||
$sql .= " note=".($this->note ? "'".$this->db->escape($this->note)."'" : 'null').",";
|
$sql .= " note=".($this->note ? "'".$this->db->escape($this->note)."'" : 'null').",";
|
||||||
$sql .= " subscription = '".price2num($this->amount)."',";
|
$sql .= " subscription = ".price2num($this->amount).",";
|
||||||
$sql .= " dateadh='".$this->db->idate($this->dateh)."',";
|
$sql .= " dateadh='".$this->db->idate($this->dateh)."',";
|
||||||
$sql .= " datef='".$this->db->idate($this->datef)."',";
|
$sql .= " datef='".$this->db->idate($this->datef)."',";
|
||||||
$sql .= " datec='".$this->db->idate($this->datec)."',";
|
$sql .= " datec='".$this->db->idate($this->datec)."',";
|
||||||
@ -384,7 +389,18 @@ class Subscription extends CommonObject
|
|||||||
$result = '';
|
$result = '';
|
||||||
|
|
||||||
$langs->load("members");
|
$langs->load("members");
|
||||||
$label = $langs->trans("ShowSubscription").': '.$this->ref;
|
|
||||||
|
$label = img_picto('', $this->picto).' <u class="paddingrightonly">'.$langs->trans("Subscription").'</u>';
|
||||||
|
/*if (isset($this->statut)) {
|
||||||
|
$label .= ' '.$this->getLibStatut(5);
|
||||||
|
}*/
|
||||||
|
$label .= '<br><b>'.$langs->trans('Ref').':</b> '.$this->ref;
|
||||||
|
if (!empty($this->dateh)) {
|
||||||
|
$label .= '<br><b>'.$langs->trans('DateStart').':</b> '.dol_print_date($this->dateh, 'day');
|
||||||
|
}
|
||||||
|
if (!empty($this->datef)) {
|
||||||
|
$label .= '<br><b>'.$langs->trans('DateEnd').':</b> '.dol_print_date($this->datef, 'day');
|
||||||
|
}
|
||||||
|
|
||||||
$url = DOL_URL_ROOT.'/adherents/subscription/card.php?rowid='.$this->id;
|
$url = DOL_URL_ROOT.'/adherents/subscription/card.php?rowid='.$this->id;
|
||||||
|
|
||||||
@ -398,8 +414,6 @@ class Subscription extends CommonObject
|
|||||||
$linkstart = '<a href="'.$url.'" class="classfortooltip" title="'.dol_escape_htmltag($label, 1).'">';
|
$linkstart = '<a href="'.$url.'" class="classfortooltip" title="'.dol_escape_htmltag($label, 1).'">';
|
||||||
$linkend = '</a>';
|
$linkend = '</a>';
|
||||||
|
|
||||||
$picto = 'payment';
|
|
||||||
|
|
||||||
$result .= $linkstart;
|
$result .= $linkstart;
|
||||||
if ($withpicto) $result .= img_object(($notooltip ? '' : $label), ($this->picto ? $this->picto : 'generic'), ($notooltip ? (($withpicto != 2) ? 'class="paddingright"' : '') : 'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip"'), 0, 0, $notooltip ? 0 : 1);
|
if ($withpicto) $result .= img_object(($notooltip ? '' : $label), ($this->picto ? $this->picto : 'generic'), ($notooltip ? (($withpicto != 2) ? 'class="paddingright"' : '') : 'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip"'), 0, 0, $notooltip ? 0 : 1);
|
||||||
if ($withpicto != 2) $result .= $this->ref;
|
if ($withpicto != 2) $result .= $this->ref;
|
||||||
|
|||||||
@ -37,7 +37,8 @@ require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent_type.class.php';
|
|||||||
$langs->loadLangs(array("companies", "members", "other"));
|
$langs->loadLangs(array("companies", "members", "other"));
|
||||||
|
|
||||||
|
|
||||||
$id = GETPOST('id', 'int');
|
$id = GETPOSTISSET('id') ? GETPOST('id', 'int') : GETPOST('rowid', 'int');
|
||||||
|
$ref = GETPOST('ref', 'alphanohtml');
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$confirm = GETPOST('confirm', 'alpha');
|
$confirm = GETPOST('confirm', 'alpha');
|
||||||
|
|
||||||
@ -60,7 +61,7 @@ if (!$sortfield) $sortfield = "name";
|
|||||||
$form = new Form($db);
|
$form = new Form($db);
|
||||||
$object = new Adherent($db);
|
$object = new Adherent($db);
|
||||||
$membert = new AdherentType($db);
|
$membert = new AdherentType($db);
|
||||||
$result = $object->fetch($id);
|
$result = $object->fetch($id, $ref);
|
||||||
if ($result < 0) {
|
if ($result < 0) {
|
||||||
dol_print_error($db);
|
dol_print_error($db);
|
||||||
exit;
|
exit;
|
||||||
|
|||||||
@ -181,8 +181,8 @@ if ($conf->use_javascript_ajax) {
|
|||||||
}
|
}
|
||||||
$total = $SommeA + $SommeB + $SommeC + $SommeD;
|
$total = $SommeA + $SommeB + $SommeC + $SommeD;
|
||||||
$dataseries = array();
|
$dataseries = array();
|
||||||
$dataseries[] = array($langs->transnoentitiesnoconv("MenuMembersNotUpToDate"), round($SommeB));
|
$dataseries[] = array($langs->transnoentitiesnoconv("OutOfDate"), round($SommeB));
|
||||||
$dataseries[] = array($langs->transnoentitiesnoconv("MenuMembersUpToDate"), round($SommeC));
|
$dataseries[] = array($langs->transnoentitiesnoconv("UpToDate"), round($SommeC));
|
||||||
$dataseries[] = array($langs->transnoentitiesnoconv("MembersStatusResiliated"), round($SommeD));
|
$dataseries[] = array($langs->transnoentitiesnoconv("MembersStatusResiliated"), round($SommeD));
|
||||||
$dataseries[] = array($langs->transnoentitiesnoconv("MembersStatusToValid"), round($SommeA));
|
$dataseries[] = array($langs->transnoentitiesnoconv("MembersStatusToValid"), round($SommeA));
|
||||||
|
|
||||||
@ -422,8 +422,8 @@ print '<table class="noborder centpercent">';
|
|||||||
print '<tr class="liste_titre">';
|
print '<tr class="liste_titre">';
|
||||||
print '<th>'.$langs->trans("MembersTypes").'</th>';
|
print '<th>'.$langs->trans("MembersTypes").'</th>';
|
||||||
print '<th class=right>'.$langs->trans("MembersStatusToValid").'</th>';
|
print '<th class=right>'.$langs->trans("MembersStatusToValid").'</th>';
|
||||||
print '<th class=right>'.$langs->trans("MenuMembersNotUpToDate").'</th>';
|
print '<th class=right>'.$langs->trans("OutOfDate").'</th>';
|
||||||
print '<th class=right>'.$langs->trans("MenuMembersUpToDate").'</th>';
|
print '<th class=right>'.$langs->trans("UpToDate").'</th>';
|
||||||
print '<th class=right>'.$langs->trans("MembersStatusResiliated").'</th>';
|
print '<th class=right>'.$langs->trans("MembersStatusResiliated").'</th>';
|
||||||
print "</tr>\n";
|
print "</tr>\n";
|
||||||
|
|
||||||
|
|||||||
@ -101,7 +101,7 @@ $search_array_options = $extrafields->getOptionalsFromPost($object->table_elemen
|
|||||||
|
|
||||||
// List of fields to search into when doing a "search in all"
|
// List of fields to search into when doing a "search in all"
|
||||||
$fieldstosearchall = array(
|
$fieldstosearchall = array(
|
||||||
'd.rowid'=>'Ref',
|
'd.ref'=>'Ref',
|
||||||
'd.login'=>'Login',
|
'd.login'=>'Login',
|
||||||
'd.lastname'=>'Lastname',
|
'd.lastname'=>'Lastname',
|
||||||
'd.firstname'=>'Firstname',
|
'd.firstname'=>'Firstname',
|
||||||
@ -146,12 +146,7 @@ $arrayfields = array(
|
|||||||
'd.statut'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>1000)
|
'd.statut'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>1000)
|
||||||
);
|
);
|
||||||
// Extra fields
|
// Extra fields
|
||||||
if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label']) > 0) {
|
include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_array_fields.tpl.php';
|
||||||
foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) {
|
|
||||||
if (!empty($extrafields->attributes[$object->table_element]['list'][$key]))
|
|
||||||
$arrayfields["ef.".$key] = array('label'=>$extrafields->attributes[$object->table_element]['label'][$key], 'checked'=>(($extrafields->attributes[$object->table_element]['list'][$key] < 0) ? 0 : 1), 'position'=>$extrafields->attributes[$object->table_element]['pos'][$key], 'enabled'=>(abs($extrafields->attributes[$object->table_element]['list'][$key]) != 3 && $extrafields->attributes[$object->table_element]['perms'][$key]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -251,7 +246,7 @@ $memberstatic = new Adherent($db);
|
|||||||
|
|
||||||
$now = dol_now();
|
$now = dol_now();
|
||||||
|
|
||||||
$sql = "SELECT d.rowid, d.login, d.lastname, d.firstname, d.gender, d.societe as company, d.fk_soc,";
|
$sql = "SELECT d.rowid, d.ref, d.login, d.lastname, d.firstname, d.gender, d.societe as company, d.fk_soc,";
|
||||||
$sql .= " d.civility, d.datefin, d.address, d.zip, d.town, d.state_id, d.country,";
|
$sql .= " d.civility, d.datefin, d.address, d.zip, d.town, d.state_id, d.country,";
|
||||||
$sql .= " d.email, d.phone, d.phone_perso, d.phone_mobile, d.skype, d.birth, d.public, d.photo,";
|
$sql .= " d.email, d.phone, d.phone_perso, d.phone_mobile, d.skype, d.birth, d.public, d.photo,";
|
||||||
$sql .= " d.fk_adherent_type as type_id, d.morphy, d.statut, d.datec as date_creation, d.tms as date_update,";
|
$sql .= " d.fk_adherent_type as type_id, d.morphy, d.statut, d.datec as date_creation, d.tms as date_update,";
|
||||||
@ -268,8 +263,13 @@ $reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters); // N
|
|||||||
$sql .= preg_replace('/^,/', '', $hookmanager->resPrint);
|
$sql .= preg_replace('/^,/', '', $hookmanager->resPrint);
|
||||||
$sql = preg_replace('/,\s*$/', '', $sql);
|
$sql = preg_replace('/,\s*$/', '', $sql);
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."adherent as d";
|
$sql .= " FROM ".MAIN_DB_PREFIX."adherent as d";
|
||||||
if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) $sql .= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (d.rowid = ef.fk_object)";
|
if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) {
|
||||||
if (!empty($search_categ) || !empty($catid)) $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX."categorie_member as cm ON d.rowid = cm.fk_member"; // We need this table joined to the select in order to filter by categ
|
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (d.rowid = ef.fk_object)";
|
||||||
|
}
|
||||||
|
if (!empty($search_categ) || !empty($catid)) {
|
||||||
|
// We need this table joined to the select in order to filter by categ
|
||||||
|
$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX."categorie_member as cm ON d.rowid = cm.fk_member";
|
||||||
|
}
|
||||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as country on (country.rowid = d.country)";
|
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as country on (country.rowid = d.country)";
|
||||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_departements as state on (state.rowid = d.state_id)";
|
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_departements as state on (state.rowid = d.state_id)";
|
||||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s on (s.rowid = d.fk_soc)";
|
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s on (s.rowid = d.fk_soc)";
|
||||||
@ -285,10 +285,12 @@ if ($search_type > 0) $sql .= " AND t.rowid=".$db->escape($search_type);
|
|||||||
if ($search_filter == 'withoutsubscription') $sql .= " AND (datefin IS NULL OR t.subscription = 0)";
|
if ($search_filter == 'withoutsubscription') $sql .= " AND (datefin IS NULL OR t.subscription = 0)";
|
||||||
if ($search_filter == 'uptodate') $sql .= " AND (datefin >= '".$db->idate($now)."' OR t.subscription = 0)";
|
if ($search_filter == 'uptodate') $sql .= " AND (datefin >= '".$db->idate($now)."' OR t.subscription = 0)";
|
||||||
if ($search_filter == 'outofdate') $sql .= " AND (datefin < '".$db->idate($now)."' AND t.subscription = 1)";
|
if ($search_filter == 'outofdate') $sql .= " AND (datefin < '".$db->idate($now)."' AND t.subscription = 1)";
|
||||||
if ($search_status != '') $sql .= " AND d.statut in (".$db->sanitize($db->escape($search_status)).")"; // Peut valoir un nombre ou liste de nombre separes par virgules
|
if ($search_status != '') {
|
||||||
|
// Peut valoir un nombre ou liste de nombre separes par virgules
|
||||||
|
$sql .= " AND d.statut in (".$db->sanitize($db->escape($search_status)).")";
|
||||||
|
}
|
||||||
if ($search_ref) {
|
if ($search_ref) {
|
||||||
if (is_numeric($search_ref)) $sql .= " AND (d.rowid = ".$db->escape($search_ref).")";
|
$sql .= natural_search("d.ref", $search_ref);
|
||||||
else $sql .= " AND 1 = 2"; // Always wrong
|
|
||||||
}
|
}
|
||||||
if ($search_civility) $sql .= natural_search("d.civility", $search_civility);
|
if ($search_civility) $sql .= natural_search("d.civility", $search_civility);
|
||||||
if ($search_firstname) $sql .= natural_search("d.firstname", $search_firstname);
|
if ($search_firstname) $sql .= natural_search("d.firstname", $search_firstname);
|
||||||
@ -607,7 +609,7 @@ print "</tr>\n";
|
|||||||
|
|
||||||
print '<tr class="liste_titre">';
|
print '<tr class="liste_titre">';
|
||||||
if (!empty($conf->global->MAIN_SHOW_TECHNICAL_ID)) print_liste_field_titre("ID", $_SERVER["PHP_SELF"], '', '', $param, 'align="center"', $sortfield, $sortorder);
|
if (!empty($conf->global->MAIN_SHOW_TECHNICAL_ID)) print_liste_field_titre("ID", $_SERVER["PHP_SELF"], '', '', $param, 'align="center"', $sortfield, $sortorder);
|
||||||
if (!empty($arrayfields['d.ref']['checked'])) print_liste_field_titre($arrayfields['d.ref']['label'], $_SERVER["PHP_SELF"], 'd.rowid', '', $param, '', $sortfield, $sortorder);
|
if (!empty($arrayfields['d.ref']['checked'])) print_liste_field_titre($arrayfields['d.ref']['label'], $_SERVER["PHP_SELF"], 'd.ref', '', $param, '', $sortfield, $sortorder);
|
||||||
if (!empty($arrayfields['d.civility']['checked'])) print_liste_field_titre($arrayfields['d.civility']['label'], $_SERVER["PHP_SELF"], 'd.civility', '', $param, '', $sortfield, $sortorder);
|
if (!empty($arrayfields['d.civility']['checked'])) print_liste_field_titre($arrayfields['d.civility']['label'], $_SERVER["PHP_SELF"], 'd.civility', '', $param, '', $sortfield, $sortorder);
|
||||||
if (!empty($arrayfields['d.firstname']['checked'])) print_liste_field_titre($arrayfields['d.firstname']['label'], $_SERVER["PHP_SELF"], 'd.firstname', '', $param, '', $sortfield, $sortorder);
|
if (!empty($arrayfields['d.firstname']['checked'])) print_liste_field_titre($arrayfields['d.firstname']['label'], $_SERVER["PHP_SELF"], 'd.firstname', '', $param, '', $sortfield, $sortorder);
|
||||||
if (!empty($arrayfields['d.lastname']['checked'])) print_liste_field_titre($arrayfields['d.lastname']['label'], $_SERVER["PHP_SELF"], 'd.lastname', '', $param, '', $sortfield, $sortorder);
|
if (!empty($arrayfields['d.lastname']['checked'])) print_liste_field_titre($arrayfields['d.lastname']['label'], $_SERVER["PHP_SELF"], 'd.lastname', '', $param, '', $sortfield, $sortorder);
|
||||||
@ -647,7 +649,7 @@ while ($i < min($num, $limit)) {
|
|||||||
|
|
||||||
$datefin = $db->jdate($obj->datefin);
|
$datefin = $db->jdate($obj->datefin);
|
||||||
$memberstatic->id = $obj->rowid;
|
$memberstatic->id = $obj->rowid;
|
||||||
$memberstatic->ref = $obj->rowid;
|
$memberstatic->ref = $obj->ref;
|
||||||
$memberstatic->civility_id = $obj->civility;
|
$memberstatic->civility_id = $obj->civility;
|
||||||
$memberstatic->lastname = $obj->lastname;
|
$memberstatic->lastname = $obj->lastname;
|
||||||
$memberstatic->firstname = $obj->firstname;
|
$memberstatic->firstname = $obj->firstname;
|
||||||
|
|||||||
@ -300,57 +300,75 @@ if ($user->rights->adherent->cotisation->creer && $action == 'subscription' && !
|
|||||||
if (!$error) {
|
if (!$error) {
|
||||||
// Send confirmation Email
|
// Send confirmation Email
|
||||||
if ($object->email && $sendalsoemail) { // $object is 'Adherent'
|
if ($object->email && $sendalsoemail) { // $object is 'Adherent'
|
||||||
$subject = '';
|
$parameters = array(
|
||||||
$msg = '';
|
'datesubscription' => $datesubscription,
|
||||||
|
'amount' => $amount,
|
||||||
// Send subscription email
|
'ccountid' => $accountid,
|
||||||
include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php';
|
'operation' => $operation,
|
||||||
$formmail = new FormMail($db);
|
'label' => $label,
|
||||||
// Set output language
|
'num_chq' => $num_chq,
|
||||||
$outputlangs = new Translate('', $conf);
|
'emetteur_nom' => $emetteur_nom,
|
||||||
$outputlangs->setDefaultLang(empty($object->thirdparty->default_lang) ? $mysoc->default_lang : $object->thirdparty->default_lang);
|
'emetteur_banque' => $emetteur_banque,
|
||||||
// Load traductions files required by page
|
'datesubend' => $datesubend
|
||||||
$outputlangs->loadLangs(array("main", "members"));
|
);
|
||||||
|
$reshook = $hookmanager->executeHooks('sendMail', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
|
||||||
// Get email content from template
|
if ($reshook < 0) {
|
||||||
$arraydefaultmessage = null;
|
setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
||||||
$labeltouse = $conf->global->ADHERENT_EMAIL_TEMPLATE_SUBSCRIPTION;
|
|
||||||
|
|
||||||
if (!empty($labeltouse)) $arraydefaultmessage = $formmail->getEMailTemplate($db, 'member', $user, $outputlangs, 0, 1, $labeltouse);
|
|
||||||
|
|
||||||
if (!empty($labeltouse) && is_object($arraydefaultmessage) && $arraydefaultmessage->id > 0) {
|
|
||||||
$subject = $arraydefaultmessage->topic;
|
|
||||||
$msg = $arraydefaultmessage->content;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $object);
|
if (empty($reshook)) {
|
||||||
complete_substitutions_array($substitutionarray, $outputlangs, $object);
|
$subject = '';
|
||||||
$subjecttosend = make_substitutions($subject, $substitutionarray, $outputlangs);
|
$msg = '';
|
||||||
$texttosend = make_substitutions(dol_concatdesc($msg, $adht->getMailOnSubscription()), $substitutionarray, $outputlangs);
|
|
||||||
|
|
||||||
// Attach a file ?
|
// Send subscription email
|
||||||
$file = '';
|
include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php';
|
||||||
$listofpaths = array();
|
$formmail = new FormMail($db);
|
||||||
$listofnames = array();
|
// Set output language
|
||||||
$listofmimes = array();
|
$outputlangs = new Translate('', $conf);
|
||||||
if (is_object($object->invoice)) {
|
$outputlangs->setDefaultLang(empty($object->thirdparty->default_lang) ? $mysoc->default_lang : $object->thirdparty->default_lang);
|
||||||
$invoicediroutput = $conf->facture->dir_output;
|
// Load traductions files required by page
|
||||||
$fileparams = dol_most_recent_file($invoicediroutput.'/'.$object->invoice->ref, preg_quote($object->invoice->ref, '/').'[^\-]+');
|
$outputlangs->loadLangs(array("main", "members"));
|
||||||
$file = $fileparams['fullname'];
|
|
||||||
|
|
||||||
$listofpaths = array($file);
|
// Get email content from template
|
||||||
$listofnames = array(basename($file));
|
$arraydefaultmessage = null;
|
||||||
$listofmimes = array(dol_mimetype($file));
|
$labeltouse = $conf->global->ADHERENT_EMAIL_TEMPLATE_SUBSCRIPTION;
|
||||||
}
|
|
||||||
|
|
||||||
$moreinheader = 'X-Dolibarr-Info: send_an_email by adherents/subscription.php'."\r\n";
|
if (!empty($labeltouse)) $arraydefaultmessage = $formmail->getEMailTemplate($db, 'member', $user, $outputlangs, 0, 1, $labeltouse);
|
||||||
|
|
||||||
$result = $object->send_an_email($texttosend, $subjecttosend, $listofpaths, $listofmimes, $listofnames, "", "", 0, -1, '', $moreinheader);
|
if (!empty($labeltouse) && is_object($arraydefaultmessage) && $arraydefaultmessage->id > 0) {
|
||||||
if ($result < 0) {
|
$subject = $arraydefaultmessage->topic;
|
||||||
$errmsg = $object->error;
|
$msg = $arraydefaultmessage->content;
|
||||||
setEventMessages($object->error, $object->errors, 'errors');
|
}
|
||||||
} else {
|
|
||||||
setEventMessages($langs->trans("EmailSentToMember", $object->email), null, 'mesgs');
|
$substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $object);
|
||||||
|
complete_substitutions_array($substitutionarray, $outputlangs, $object);
|
||||||
|
$subjecttosend = make_substitutions($subject, $substitutionarray, $outputlangs);
|
||||||
|
$texttosend = make_substitutions(dol_concatdesc($msg, $adht->getMailOnSubscription()), $substitutionarray, $outputlangs);
|
||||||
|
|
||||||
|
// Attach a file ?
|
||||||
|
$file = '';
|
||||||
|
$listofpaths = array();
|
||||||
|
$listofnames = array();
|
||||||
|
$listofmimes = array();
|
||||||
|
if (is_object($object->invoice) && (!is_object($arraydefaultmessage) || intval($arraydefaultmessage->joinfiles))) {
|
||||||
|
$invoicediroutput = $conf->facture->dir_output;
|
||||||
|
$fileparams = dol_most_recent_file($invoicediroutput.'/'.$object->invoice->ref, preg_quote($object->invoice->ref, '/').'[^\-]+');
|
||||||
|
$file = $fileparams['fullname'];
|
||||||
|
|
||||||
|
$listofpaths = array($file);
|
||||||
|
$listofnames = array(basename($file));
|
||||||
|
$listofmimes = array(dol_mimetype($file));
|
||||||
|
}
|
||||||
|
|
||||||
|
$moreinheader = 'X-Dolibarr-Info: send_an_email by adherents/subscription.php'."\r\n";
|
||||||
|
|
||||||
|
$result = $object->send_an_email($texttosend, $subjecttosend, $listofpaths, $listofmimes, $listofnames, "", "", 0, -1, '', $moreinheader);
|
||||||
|
if ($result < 0) {
|
||||||
|
$errmsg = $object->error;
|
||||||
|
setEventMessages($object->error, $object->errors, 'errors');
|
||||||
|
} else {
|
||||||
|
setEventMessages($langs->trans("EmailSentToMember", $object->email), null, 'mesgs');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
setEventMessages($langs->trans("NoEmailSentToMember"), null, 'mesgs');
|
setEventMessages($langs->trans("NoEmailSentToMember"), null, 'mesgs');
|
||||||
@ -1025,7 +1043,7 @@ if ($rowid > 0) {
|
|||||||
print '<div class="center">';
|
print '<div class="center">';
|
||||||
print '<input type="submit" class="button" name="add" value="'.$langs->trans("AddSubscription").'">';
|
print '<input type="submit" class="button" name="add" value="'.$langs->trans("AddSubscription").'">';
|
||||||
print ' ';
|
print ' ';
|
||||||
print '<input type="submit" class="button" name="cancel" value="'.$langs->trans("Cancel").'">';
|
print '<input type="submit" class="button button-cancel" name="cancel" value="'.$langs->trans("Cancel").'">';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
|
||||||
print '</form>';
|
print '</form>';
|
||||||
|
|||||||
@ -236,9 +236,9 @@ if ($user->rights->adherent->cotisation->creer && $action == 'edit') {
|
|||||||
print dol_get_fiche_end();
|
print dol_get_fiche_end();
|
||||||
|
|
||||||
print '<div class="center">';
|
print '<div class="center">';
|
||||||
print '<input type="submit" class="button" name="submit" value="'.$langs->trans("Save").'">';
|
print '<input type="submit" class="button button-save" name="submit" value="'.$langs->trans("Save").'">';
|
||||||
print ' ';
|
print ' ';
|
||||||
print '<input type="submit" class="button" name="cancel" value="'.$langs->trans("Cancel").'">';
|
print '<input type="submit" class="button button-cancel" name="cancel" value="'.$langs->trans("Cancel").'">';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
|
||||||
print '</form>';
|
print '</form>';
|
||||||
|
|||||||
@ -395,6 +395,8 @@ while ($i < min($num, $limit)) {
|
|||||||
|
|
||||||
$subscription->ref = $obj->crowid;
|
$subscription->ref = $obj->crowid;
|
||||||
$subscription->id = $obj->crowid;
|
$subscription->id = $obj->crowid;
|
||||||
|
$subscription->dateh = $db->jdate($obj->dateadh);
|
||||||
|
$subscription->datef = $db->jdate($obj->datef);
|
||||||
|
|
||||||
$adherent->lastname = $obj->lastname;
|
$adherent->lastname = $obj->lastname;
|
||||||
$adherent->firstname = $obj->firstname;
|
$adherent->firstname = $obj->firstname;
|
||||||
@ -431,9 +433,7 @@ while ($i < min($num, $limit)) {
|
|||||||
|
|
||||||
// Lastname
|
// Lastname
|
||||||
if (!empty($arrayfields['d.lastname']['checked'])) {
|
if (!empty($arrayfields['d.lastname']['checked'])) {
|
||||||
$adherent->firstname = '';
|
print '<td>'.$adherent->getNomUrl(-1, 0, 'card', 'lastname').'</td>';
|
||||||
print '<td>'.$adherent->getNomUrl(-1).'</td>';
|
|
||||||
$adherent->firstname = $obj->firstname;
|
|
||||||
if (!$i) $totalarray['nbfield']++;
|
if (!$i) $totalarray['nbfield']++;
|
||||||
}
|
}
|
||||||
// Firstname
|
// Firstname
|
||||||
|
|||||||
@ -364,7 +364,7 @@ if ($action == 'create') {
|
|||||||
print '<div class="center">';
|
print '<div class="center">';
|
||||||
print '<input type="submit" name="button" class="button" value="'.$langs->trans("Add").'">';
|
print '<input type="submit" name="button" class="button" value="'.$langs->trans("Add").'">';
|
||||||
print ' ';
|
print ' ';
|
||||||
print '<input type="submit" name="cancel" class="button" value="'.$langs->trans("Cancel").'" onclick="history.go(-1)" />';
|
print '<input type="submit" name="cancel" class="button button-cancel" value="'.$langs->trans("Cancel").'" onclick="history.go(-1)" />';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
|
||||||
print "</form>\n";
|
print "</form>\n";
|
||||||
@ -719,7 +719,7 @@ if ($rowid > 0) {
|
|||||||
|
|
||||||
print '<tr><td class="titlefield">'.$langs->trans("Ref").'</td><td>'.$object->id.'</td></tr>';
|
print '<tr><td class="titlefield">'.$langs->trans("Ref").'</td><td>'.$object->id.'</td></tr>';
|
||||||
|
|
||||||
print '<tr><td class="fieldrequired">'.$langs->trans("Label").'</td><td><input type="text" name="label" size="40" value="'.dol_escape_htmltag($object->label).'"></td></tr>';
|
print '<tr><td class="fieldrequired">'.$langs->trans("Label").'</td><td><input type="text" class="minwidth300" name="label" value="'.dol_escape_htmltag($object->label).'"></td></tr>';
|
||||||
|
|
||||||
print '<tr><td>'.$langs->trans("Status").'</td><td>';
|
print '<tr><td>'.$langs->trans("Status").'</td><td>';
|
||||||
print $form->selectarray('status', array('0'=>$langs->trans('ActivityCeased'), '1'=>$langs->trans('InActivity')), $object->status);
|
print $form->selectarray('status', array('0'=>$langs->trans('ActivityCeased'), '1'=>$langs->trans('InActivity')), $object->status);
|
||||||
@ -765,9 +765,9 @@ if ($rowid > 0) {
|
|||||||
print dol_get_fiche_end();
|
print dol_get_fiche_end();
|
||||||
|
|
||||||
print '<div class="center">';
|
print '<div class="center">';
|
||||||
print '<input type="submit" class="button" value="'.$langs->trans("Save").'">';
|
print '<input type="submit" class="button button-save" value="'.$langs->trans("Save").'">';
|
||||||
print ' ';
|
print ' ';
|
||||||
print '<input type="submit" name="cancel" class="button" value="'.$langs->trans("Cancel").'">';
|
print '<input type="submit" name="cancel" class="button button-cancel" value="'.$langs->trans("Cancel").'">';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
|
||||||
print "</form>";
|
print "</form>";
|
||||||
|
|||||||
@ -37,6 +37,7 @@ $langs->loadLangs(array('members', 'languages'));
|
|||||||
$id = GETPOST('rowid', 'int');
|
$id = GETPOST('rowid', 'int');
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$cancel = GETPOST('cancel', 'alpha');
|
$cancel = GETPOST('cancel', 'alpha');
|
||||||
|
$ref = GETPOST('ref', 'alphanohtml');
|
||||||
|
|
||||||
// Security check
|
// Security check
|
||||||
$fieldvalue = (!empty($id) ? $id : (!empty($ref) ? $ref : ''));
|
$fieldvalue = (!empty($id) ? $id : (!empty($ref) ? $ref : ''));
|
||||||
@ -67,15 +68,17 @@ if ($action == 'vadd' && $cancel != $langs->trans("Cancel") && $user->rights->ad
|
|||||||
$object->fetch($id);
|
$object->fetch($id);
|
||||||
$current_lang = $langs->getDefaultLang();
|
$current_lang = $langs->getDefaultLang();
|
||||||
|
|
||||||
|
$forcelangprod = GETPOST("forcelangprod", 'aZ09');
|
||||||
|
|
||||||
// update of object
|
// update of object
|
||||||
if ($_POST["forcelangprod"] == $current_lang) {
|
if ($forcelangprod == $current_lang) {
|
||||||
$object->label = $_POST["libelle"];
|
$object->label = GETPOST("libelle", 'alphanohtml');
|
||||||
$object->description = dol_htmlcleanlastbr($_POST["desc"]);
|
$object->description = dol_htmlcleanlastbr(GETPOST("desc", 'restricthtml'));
|
||||||
$object->other = dol_htmlcleanlastbr($_POST["other"]);
|
$object->other = dol_htmlcleanlastbr(GETPOST("other", 'restricthtml'));
|
||||||
} else {
|
} else {
|
||||||
$object->multilangs[$_POST["forcelangprod"]]["label"] = $_POST["libelle"];
|
$object->multilangs[$forcelangprod]["label"] = GETPOST("libelle", 'alphanohtml');
|
||||||
$object->multilangs[$_POST["forcelangprod"]]["description"] = dol_htmlcleanlastbr($_POST["desc"]);
|
$object->multilangs[$forcelangprod]["description"] = dol_htmlcleanlastbr(GETPOST("desc", 'restricthtml'));
|
||||||
$object->multilangs[$_POST["forcelangprod"]]["other"] = dol_htmlcleanlastbr($_POST["other"]);
|
$object->multilangs[$forcelangprod]["other"] = dol_htmlcleanlastbr(GETPOST("other", 'restricthtml'));
|
||||||
}
|
}
|
||||||
|
|
||||||
// backup into database
|
// backup into database
|
||||||
@ -95,13 +98,13 @@ if ($action == 'vedit' && $cancel != $langs->trans("Cancel") && $user->rights->a
|
|||||||
|
|
||||||
foreach ($object->multilangs as $key => $value) { // saving new values in the object
|
foreach ($object->multilangs as $key => $value) { // saving new values in the object
|
||||||
if ($key == $current_lang) {
|
if ($key == $current_lang) {
|
||||||
$object->label = $_POST["libelle-".$key];
|
$object->label = GETPOST("libelle-".$key, 'alphanohtml');
|
||||||
$object->description = dol_htmlcleanlastbr($_POST["desc-".$key]);
|
$object->description = dol_htmlcleanlastbr(GETPOST("desc-".$key, 'restricthtml'));
|
||||||
$object->other = dol_htmlcleanlastbr($_POST["other-".$key]);
|
$object->other = dol_htmlcleanlastbr(GETPOST("other-".$key, 'restricthtml'));
|
||||||
} else {
|
} else {
|
||||||
$object->multilangs[$key]["label"] = $_POST["libelle-".$key];
|
$object->multilangs[$key]["label"] = GETPOST("libelle-".$key, 'alphanohtml');
|
||||||
$object->multilangs[$key]["description"] = dol_htmlcleanlastbr($_POST["desc-".$key]);
|
$object->multilangs[$key]["description"] = dol_htmlcleanlastbr(GETPOST("desc-".$key, 'restricthtml'));
|
||||||
$object->multilangs[$key]["other"] = dol_htmlcleanlastbr($_POST["other-".$key]);
|
$object->multilangs[$key]["other"] = dol_htmlcleanlastbr(GETPOST("other-".$key, 'restricthtml'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -205,7 +208,7 @@ if ($action == 'edit') {
|
|||||||
|
|
||||||
print '<div class="underbanner clearboth"></div>';
|
print '<div class="underbanner clearboth"></div>';
|
||||||
print '<table class="border centpercent">';
|
print '<table class="border centpercent">';
|
||||||
print '<tr><td class="tdtop titlefieldcreate fieldrequired">'.$langs->trans('Label').'</td><td><input name="libelle-'.$key.'" size="40" value="'.dol_escape_htmltag($object->multilangs[$key]["label"]).'"></td></tr>';
|
print '<tr><td class="tdtop titlefieldcreate fieldrequired">'.$langs->trans('Label').'</td><td><input name="libelle-'.$key.'" class="minwidth300" value="'.dol_escape_htmltag($object->multilangs[$key]["label"]).'"></td></tr>';
|
||||||
print '<tr><td class="tdtop">'.$langs->trans('Description').'</td><td>';
|
print '<tr><td class="tdtop">'.$langs->trans('Description').'</td><td>';
|
||||||
$doleditor = new DolEditor("desc-$key", $object->multilangs[$key]["description"], '', 160, 'dolibarr_notes', '', false, true, $conf->global->FCKEDITOR_ENABLE_PRODUCTDESC, ROWS_3, '90%');
|
$doleditor = new DolEditor("desc-$key", $object->multilangs[$key]["description"], '', 160, 'dolibarr_notes', '', false, true, $conf->global->FCKEDITOR_ENABLE_PRODUCTDESC, ROWS_3, '90%');
|
||||||
$doleditor->Create();
|
$doleditor->Create();
|
||||||
@ -218,9 +221,9 @@ if ($action == 'edit') {
|
|||||||
print '<br>';
|
print '<br>';
|
||||||
|
|
||||||
print '<div class="center">';
|
print '<div class="center">';
|
||||||
print '<input type="submit" class="button" value="'.$langs->trans("Save").'">';
|
print '<input type="submit" class="button button-save" value="'.$langs->trans("Save").'">';
|
||||||
print ' ';
|
print ' ';
|
||||||
print '<input type="submit" class="button" name="cancel" value="'.$langs->trans("Cancel").'">';
|
print '<input type="submit" class="button button-cancel" name="cancel" value="'.$langs->trans("Cancel").'">';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
|
||||||
print '</form>';
|
print '</form>';
|
||||||
@ -264,7 +267,7 @@ if ($action == 'add' && $user->rights->adherent->configurer) {
|
|||||||
print '<tr><td class="tdtop titlefieldcreate fieldrequired">'.$langs->trans('Language').'</td><td>';
|
print '<tr><td class="tdtop titlefieldcreate fieldrequired">'.$langs->trans('Language').'</td><td>';
|
||||||
print $formadmin->select_language('', 'forcelangprod', 0, $object->multilangs, 1);
|
print $formadmin->select_language('', 'forcelangprod', 0, $object->multilangs, 1);
|
||||||
print '</td></tr>';
|
print '</td></tr>';
|
||||||
print '<tr><td class="tdtop fieldrequired">'.$langs->trans('Label').'</td><td><input name="libelle" size="40"></td></tr>';
|
print '<tr><td class="tdtop fieldrequired">'.$langs->trans('Label').'</td><td><input name="libelle" class="minwidth300" value="'.dol_escape_htmltag(GETPOST("libelle", 'alphanohtml')).'"></td></tr>';
|
||||||
print '<tr><td class="tdtop">'.$langs->trans('Description').'</td><td>';
|
print '<tr><td class="tdtop">'.$langs->trans('Description').'</td><td>';
|
||||||
$doleditor = new DolEditor('desc', '', '', 160, 'dolibarr_notes', '', false, true, $conf->global->FCKEDITOR_ENABLE_PRODUCTDESC, ROWS_3, '90%');
|
$doleditor = new DolEditor('desc', '', '', 160, 'dolibarr_notes', '', false, true, $conf->global->FCKEDITOR_ENABLE_PRODUCTDESC, ROWS_3, '90%');
|
||||||
$doleditor->Create();
|
$doleditor->Create();
|
||||||
@ -275,9 +278,9 @@ if ($action == 'add' && $user->rights->adherent->configurer) {
|
|||||||
print dol_get_fiche_end();
|
print dol_get_fiche_end();
|
||||||
|
|
||||||
print '<div class="center">';
|
print '<div class="center">';
|
||||||
print '<input type="submit" class="button" value="'.$langs->trans("Save").'">';
|
print '<input type="submit" class="button button-save" value="'.$langs->trans("Save").'">';
|
||||||
print ' ';
|
print ' ';
|
||||||
print '<input type="submit" class="button" name="cancel" value="'.$langs->trans("Cancel").'">';
|
print '<input type="submit" class="button button-cancel" name="cancel" value="'.$langs->trans("Cancel").'">';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
|
||||||
print '</form>';
|
print '</form>';
|
||||||
|
|||||||
@ -170,9 +170,9 @@ print '</td></tr>';
|
|||||||
print '</table>';
|
print '</table>';
|
||||||
|
|
||||||
print '<br><div class="center">';
|
print '<br><div class="center">';
|
||||||
print '<input type="submit" class="button" name="save" value="'.$langs->trans("Save").'">';
|
print '<input type="submit" class="button button-save" name="save" value="'.$langs->trans("Save").'">';
|
||||||
//print ' ';
|
//print ' ';
|
||||||
//print '<input type="submit" class="button" name="cancel" value="'.$langs->trans("Cancel").'">';
|
//print '<input type="submit" class="button button-cancel" name="cancel" value="'.$langs->trans("Cancel").'">';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
//print '<br>';
|
//print '<br>';
|
||||||
|
|
||||||
|
|||||||
@ -200,7 +200,7 @@ print '</div>';
|
|||||||
print dol_get_fiche_end();
|
print dol_get_fiche_end();
|
||||||
|
|
||||||
print '<div class="center">';
|
print '<div class="center">';
|
||||||
print '<input type="submit" name="save" class="button" value="'.$langs->trans("Save").'">';
|
print '<input type="submit" name="save" class="button button-save" value="'.$langs->trans("Save").'">';
|
||||||
print "</div>";
|
print "</div>";
|
||||||
|
|
||||||
print "</form>\n";
|
print "</form>\n";
|
||||||
|
|||||||
@ -227,7 +227,7 @@ print '</table>';
|
|||||||
print dol_get_fiche_end();
|
print dol_get_fiche_end();
|
||||||
|
|
||||||
print '<div class="center">';
|
print '<div class="center">';
|
||||||
print '<input type="submit" id="save" name="save" class="button hideifnotset" value="'.$langs->trans("Save").'">';
|
print '<input type="submit" id="save" name="save" class="button hideifnotset button-save" value="'.$langs->trans("Save").'">';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
|
||||||
print "</form>\n";
|
print "</form>\n";
|
||||||
|
|||||||
@ -292,7 +292,7 @@ if ($conf->global->MAIN_FEATURES_LEVEL >= 2)
|
|||||||
print $form->textwithpicto('', $htmltooltip, 1, 0);
|
print $form->textwithpicto('', $htmltooltip, 1, 0);
|
||||||
print '</td>';
|
print '</td>';
|
||||||
print '<td class="center">';
|
print '<td class="center">';
|
||||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=specimen&module='.$name.'">'.img_object($langs->trans("Preview"), 'order').'</a>';
|
print '<a href="'.$_SERVER["PHP_SELF"].'?action=specimen&module='.$name.'">'.img_object($langs->trans("Preview"), 'pdf').'</a>';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
print "</tr>\n";
|
print "</tr>\n";
|
||||||
@ -378,7 +378,7 @@ print '</table>';
|
|||||||
|
|
||||||
print dol_get_fiche_end();
|
print dol_get_fiche_end();
|
||||||
|
|
||||||
print '<div class="center"><input class="button" type="submit" name="save" value="'.dol_escape_htmltag($langs->trans("Save")).'"></div>';
|
print '<div class="center"><input class="button button-save" type="submit" name="save" value="'.dol_escape_htmltag($langs->trans("Save")).'"></div>';
|
||||||
|
|
||||||
print '</form>';
|
print '</form>';
|
||||||
|
|
||||||
|
|||||||
@ -25,6 +25,7 @@ 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/agenda.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/agenda.lib.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/cron/class/cronjob.class.php';
|
||||||
|
|
||||||
if (!$user->admin)
|
if (!$user->admin)
|
||||||
accessforbidden();
|
accessforbidden();
|
||||||
@ -179,59 +180,83 @@ print '<td class="center"> </td>'."\n";
|
|||||||
print '<td class="right">'.$langs->trans("Value").'</td>'."\n";
|
print '<td class="right">'.$langs->trans("Value").'</td>'."\n";
|
||||||
print '</tr>'."\n";
|
print '</tr>'."\n";
|
||||||
|
|
||||||
|
// AGENDA REMINDER BROWSER
|
||||||
|
print '<tr class="oddeven">'."\n";
|
||||||
|
print '<td>'.$langs->trans('AGENDA_REMINDER_BROWSER').'</td>'."\n";
|
||||||
|
print '<td class="center"> </td>'."\n";
|
||||||
|
print '<td class="right">'."\n";
|
||||||
|
|
||||||
|
if (empty($conf->global->AGENDA_REMINDER_BROWSER)) {
|
||||||
|
if (! getIsHTTPS()) {
|
||||||
|
$langs->load("errors");
|
||||||
|
print img_warning($langs->trans("WarningAvailableOnlyForHTTPSServers"), '', 'valignmiddle size15x').' ';
|
||||||
|
}
|
||||||
|
print '<a class="valignmiddle" href="'.$_SERVER['PHP_SELF'].'?action=set_AGENDA_REMINDER_BROWSER&token='.newToken().'">'.img_picto($langs->trans('Disabled'), 'switch_off').'</a>';
|
||||||
|
print '</td></tr>'."\n";
|
||||||
|
} else {
|
||||||
|
if (! getIsHTTPS()) {
|
||||||
|
$langs->load("errors");
|
||||||
|
print img_warning($langs->trans("WarningAvailableOnlyForHTTPSServers"), '', 'valignmiddle size15x').' ';
|
||||||
|
}
|
||||||
|
print '<a class="valignmiddle" href="'.$_SERVER['PHP_SELF'].'?action=del_AGENDA_REMINDER_BROWSER&token='.newToken().'">'.img_picto($langs->trans('Enabled'), 'switch_on').'</a>';
|
||||||
|
print '</td></tr>'."\n";
|
||||||
|
|
||||||
|
print '<tr class="oddeven">'."\n";
|
||||||
|
print '<td>'.$langs->trans('AGENDA_REMINDER_BROWSER_SOUND').'</td>'."\n";
|
||||||
|
print '<td class="center"> </td>'."\n";
|
||||||
|
print '<td class="right">'."\n";
|
||||||
|
|
||||||
|
if (empty($conf->global->AGENDA_REMINDER_BROWSER_SOUND)) {
|
||||||
|
print '<a href="'.$_SERVER['PHP_SELF'].'?action=set_AGENDA_REMINDER_BROWSER_SOUND&token='.newToken().'">'.img_picto($langs->trans('Disabled'), 'switch_off').'</a>';
|
||||||
|
} else {
|
||||||
|
print '<a href="'.$_SERVER['PHP_SELF'].'?action=del_AGENDA_REMINDER_BROWSER_SOUND&token='.newToken().'">'.img_picto($langs->trans('Enabled'), 'switch_on').'</a>';
|
||||||
|
}
|
||||||
|
|
||||||
|
print '</td></tr>'."\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
$job = new Cronjob($db);
|
||||||
|
$job->fetch(0, 'ActionComm', 'sendEmailsReminder');
|
||||||
|
|
||||||
// AGENDA REMINDER EMAIL
|
// AGENDA REMINDER EMAIL
|
||||||
if ($conf->global->MAIN_FEATURES_LEVEL == 2)
|
print '<tr class="oddeven">'."\n";
|
||||||
{
|
print '<td>'.$langs->trans('AGENDA_REMINDER_EMAIL', $langs->transnoentities("Module2300Name"));
|
||||||
print '<tr class="oddeven">'."\n";
|
if (!empty($conf->cron->enabled)) {
|
||||||
print '<td>'.$langs->trans('AGENDA_REMINDER_EMAIL', $langs->transnoentities("Module2300Name")).'</td>'."\n";
|
if (!empty($conf->global->AGENDA_REMINDER_EMAIL)) {
|
||||||
print '<td class="center"> </td>'."\n";
|
if ($job->id > 0) {
|
||||||
print '<td class="right">'."\n";
|
if ($job->status == $job::STATUS_ENABLED) {
|
||||||
|
print '<br><span class="opacitymedium">'.$langs->trans("AGENDA_REMINDER_EMAIL_NOTE", $langs->transnoentitiesnoconv("sendEmailsReminder")).'</span>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print '</td>'."\n";
|
||||||
|
print '<td class="center"> </td>'."\n";
|
||||||
|
print '<td class="right">'."\n";
|
||||||
|
|
||||||
|
if (empty($conf->cron->enabled)) {
|
||||||
|
print '<span class="opacitymedium">'.$langs->trans("WarningModuleNotActive", $langs->transnoentitiesnoconv("Module2300Name")).'</span>';
|
||||||
|
} else {
|
||||||
if (empty($conf->global->AGENDA_REMINDER_EMAIL)) {
|
if (empty($conf->global->AGENDA_REMINDER_EMAIL)) {
|
||||||
print '<a href="'.$_SERVER['PHP_SELF'].'?action=set_AGENDA_REMINDER_EMAIL&token='.newToken().'">'.img_picto($langs->trans('Disabled'), 'switch_off').'</a>';
|
print '<a href="'.$_SERVER['PHP_SELF'].'?action=set_AGENDA_REMINDER_EMAIL&token='.newToken().'">'.img_picto($langs->trans('Disabled'), 'switch_off').'</a>';
|
||||||
print '</td></tr>'."\n";
|
|
||||||
} else {
|
} else {
|
||||||
print '<a href="'.$_SERVER['PHP_SELF'].'?action=del_AGENDA_REMINDER_EMAIL&token='.newToken().'">'.img_picto($langs->trans('Enabled'), 'switch_on').'</a>';
|
// Get the max frequency of reminder
|
||||||
print '</td></tr>'."\n";
|
if ($job->id > 0) {
|
||||||
}
|
if ($job->status != $job::STATUS_ENABLED) {
|
||||||
}
|
print '<span class="opacitymedium warning">'.$langs->trans("JobXMustBeEnabled", $langs->transnoentitiesnoconv("sendEmailsReminder")).'</span>';
|
||||||
|
} else {
|
||||||
// AGENDA REMINDER BROWSER
|
print '<a href="'.$_SERVER['PHP_SELF'].'?action=del_AGENDA_REMINDER_EMAIL&token='.newToken().'">'.img_picto($langs->trans('Enabled'), 'switch_on').'</a>';
|
||||||
if ($conf->global->MAIN_FEATURES_LEVEL == 2)
|
}
|
||||||
{
|
|
||||||
print '<tr class="oddeven">'."\n";
|
|
||||||
print '<td>'.$langs->trans('AGENDA_REMINDER_BROWSER').'</td>'."\n";
|
|
||||||
print '<td class="center"> </td>'."\n";
|
|
||||||
print '<td class="right">'."\n";
|
|
||||||
|
|
||||||
if (empty($conf->global->AGENDA_REMINDER_BROWSER)) {
|
|
||||||
print '<a href="'.$_SERVER['PHP_SELF'].'?action=set_AGENDA_REMINDER_BROWSER&token='.newToken().'">'.img_picto($langs->trans('Disabled'), 'switch_off').'</a>';
|
|
||||||
print '</td></tr>'."\n";
|
|
||||||
} else {
|
|
||||||
print '<a href="'.$_SERVER['PHP_SELF'].'?action=del_AGENDA_REMINDER_BROWSER&token='.newToken().'">'.img_picto($langs->trans('Enabled'), 'switch_on').'</a>';
|
|
||||||
print '</td></tr>'."\n";
|
|
||||||
|
|
||||||
print '<tr class="oddeven">'."\n";
|
|
||||||
print '<td>'.$langs->trans('AGENDA_REMINDER_BROWSER_SOUND').'</td>'."\n";
|
|
||||||
print '<td class="center"> </td>'."\n";
|
|
||||||
print '<td class="right">'."\n";
|
|
||||||
|
|
||||||
if (empty($conf->global->AGENDA_REMINDER_BROWSER_SOUND)) {
|
|
||||||
print '<a href="'.$_SERVER['PHP_SELF'].'?action=set_AGENDA_REMINDER_BROWSER_SOUND&token='.newToken().'">'.img_picto($langs->trans('Disabled'), 'switch_off').'</a>';
|
|
||||||
} else {
|
|
||||||
print '<a href="'.$_SERVER['PHP_SELF'].'?action=del_AGENDA_REMINDER_BROWSER_SOUND&token='.newToken().'">'.img_picto($langs->trans('Enabled'), 'switch_on').'</a>';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
print '</td></tr>'."\n";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
print '</td></tr>'."\n";
|
||||||
|
|
||||||
print '</table>';
|
print '</table>';
|
||||||
|
|
||||||
print dol_get_fiche_end();
|
print dol_get_fiche_end();
|
||||||
|
|
||||||
//print '<div class="center"><input class="button" type="submit" name="save" value="'.dol_escape_htmltag($langs->trans("Save")).'"></div>';
|
//print '<div class="center"><input class="button button-save" type="submit" name="save" value="'.dol_escape_htmltag($langs->trans("Save")).'"></div>';
|
||||||
|
|
||||||
print '</form>';
|
print '</form>';
|
||||||
|
|
||||||
|
|||||||
@ -138,7 +138,7 @@ print '</table>';
|
|||||||
print dol_get_fiche_end();
|
print dol_get_fiche_end();
|
||||||
|
|
||||||
print '<div class="center">';
|
print '<div class="center">';
|
||||||
print "<input type=\"submit\" name=\"save\" class=\"button\" value=\"".$langs->trans("Save")."\">";
|
print '<input type="submit" name="save" class="button button-save" value="'.$langs->trans("Save").'">';
|
||||||
print "</div>";
|
print "</div>";
|
||||||
|
|
||||||
print "</form>\n";
|
print "</form>\n";
|
||||||
|
|||||||
@ -391,7 +391,7 @@ foreach ($dirmodels as $reldir) {
|
|||||||
// Preview
|
// Preview
|
||||||
print '<td class="center">';
|
print '<td class="center">';
|
||||||
if ($module->type == 'pdf') {
|
if ($module->type == 'pdf') {
|
||||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=specimen&module='.$name.'">'.img_object($langs->trans("Preview"), 'bill').'</a>';
|
print '<a href="'.$_SERVER["PHP_SELF"].'?action=specimen&module='.$name.'">'.img_object($langs->trans("Preview"), 'pdf').'</a>';
|
||||||
} else {
|
} else {
|
||||||
print img_object($langs->trans("PreviewNotAvailable"), 'generic');
|
print img_object($langs->trans("PreviewNotAvailable"), 'generic');
|
||||||
}
|
}
|
||||||
@ -498,7 +498,7 @@ print '</table>';
|
|||||||
print dol_get_fiche_end();
|
print dol_get_fiche_end();
|
||||||
|
|
||||||
print '<div class="center">';
|
print '<div class="center">';
|
||||||
print '<input type="submit" id="save" name="save" class="button hideifnotset" value="'.$langs->trans("Save").'">';
|
print '<input type="submit" id="save" name="save" class="button hideifnotset button-save" value="'.$langs->trans("Save").'">';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
|
||||||
print "</form>\n";
|
print "</form>\n";
|
||||||
|
|||||||
@ -282,7 +282,7 @@ print "</table>\n";
|
|||||||
|
|
||||||
if (empty($conf->use_javascript_ajax))
|
if (empty($conf->use_javascript_ajax))
|
||||||
{
|
{
|
||||||
print '<div class="center"><input type="submit" class="button" name="save" value="'.$langs->trans("Save").'"></div>';
|
print '<div class="center"><input type="submit" class="button button-save" name="save" value="'.$langs->trans("Save").'"></div>';
|
||||||
print '</form>';
|
print '</form>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -232,8 +232,10 @@ foreach ($dirmodels as $reldir)
|
|||||||
// Show example of numbering model
|
// Show example of numbering model
|
||||||
print '<td class="nowrap">';
|
print '<td class="nowrap">';
|
||||||
$tmp = $module->getExample();
|
$tmp = $module->getExample();
|
||||||
if (preg_match('/^Error/', $tmp)) print '<div class="error">'.$langs->trans($tmp).'</div>';
|
if (preg_match('/^Error/', $tmp)) {
|
||||||
elseif ($tmp == 'NotConfigured') print $langs->trans($tmp);
|
$langs->load("errors");
|
||||||
|
print '<div class="error">'.$langs->trans($tmp).'</div>';
|
||||||
|
} elseif ($tmp == 'NotConfigured') print $langs->trans($tmp);
|
||||||
else print $tmp;
|
else print $tmp;
|
||||||
print '</td>'."\n";
|
print '</td>'."\n";
|
||||||
|
|
||||||
@ -412,7 +414,7 @@ foreach ($dirmodels as $reldir)
|
|||||||
print '<td class="center">';
|
print '<td class="center">';
|
||||||
if ($module->type == 'pdf')
|
if ($module->type == 'pdf')
|
||||||
{
|
{
|
||||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=specimen&module='.$name.'">'.img_object($langs->trans("Preview"), 'bill').'</a>';
|
print '<a href="'.$_SERVER["PHP_SELF"].'?action=specimen&module='.$name.'">'.img_object($langs->trans("Preview"), 'pdf').'</a>';
|
||||||
} else {
|
} else {
|
||||||
print img_object($langs->trans("PreviewNotAvailable"), 'generic');
|
print img_object($langs->trans("PreviewNotAvailable"), 'generic');
|
||||||
}
|
}
|
||||||
|
|||||||
@ -31,7 +31,9 @@ include_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
|
|||||||
// Load translation files required by the page
|
// Load translation files required by the page
|
||||||
$langs->loadLangs(array('admin', 'boxes', 'accountancy'));
|
$langs->loadLangs(array('admin', 'boxes', 'accountancy'));
|
||||||
|
|
||||||
if (!$user->admin) accessforbidden();
|
if (!$user->admin) {
|
||||||
|
accessforbidden();
|
||||||
|
}
|
||||||
|
|
||||||
$rowid = GETPOST('rowid', 'int');
|
$rowid = GETPOST('rowid', 'int');
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
@ -46,39 +48,34 @@ $boxes = array();
|
|||||||
* Actions
|
* Actions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if ($action == 'addconst')
|
if ($action == 'addconst') {
|
||||||
{
|
|
||||||
dolibarr_set_const($db, "MAIN_BOXES_MAXLINES", $_POST["MAIN_BOXES_MAXLINES"], '', 0, '', $conf->entity);
|
dolibarr_set_const($db, "MAIN_BOXES_MAXLINES", $_POST["MAIN_BOXES_MAXLINES"], '', 0, '', $conf->entity);
|
||||||
dolibarr_set_const($db, "MAIN_ACTIVATE_FILECACHE", $_POST["MAIN_ACTIVATE_FILECACHE"], 'chaine', 0, '', $conf->entity);
|
dolibarr_set_const($db, "MAIN_ACTIVATE_FILECACHE", $_POST["MAIN_ACTIVATE_FILECACHE"], 'chaine', 0, '', $conf->entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($action == 'add') {
|
if ($action == 'add') {
|
||||||
$error = 0;
|
$error = 0;
|
||||||
|
$boxids = GETPOST('boxid', 'array');
|
||||||
|
|
||||||
$db->begin();
|
$db->begin();
|
||||||
if (isset($_POST['boxid']) && is_array($_POST['boxid']))
|
if (is_array($boxids)) {
|
||||||
{
|
foreach ($boxids as $boxid) {
|
||||||
foreach ($_POST['boxid'] as $boxid)
|
if (is_numeric($boxid['pos']) && $boxid['pos'] >= 0) { // 0=Home, 1=...
|
||||||
{
|
|
||||||
if (is_numeric($boxid['pos']) && $boxid['pos'] >= 0) // 0=Home, 1=...
|
|
||||||
{
|
|
||||||
$pos = $boxid['pos'];
|
$pos = $boxid['pos'];
|
||||||
|
|
||||||
// Initialize distinct fk_user with all already existing values of fk_user (user that use a personalized view of boxes for page "pos")
|
// Initialize distinct fk_user with all already existing values of fk_user (user that use a personalized view of boxes for page "pos")
|
||||||
$distinctfkuser = array();
|
$distinctfkuser = array();
|
||||||
if (!$error)
|
if (!$error) {
|
||||||
{
|
|
||||||
$sql = "SELECT fk_user";
|
$sql = "SELECT fk_user";
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."user_param";
|
$sql .= " FROM ".MAIN_DB_PREFIX."user_param";
|
||||||
$sql .= " WHERE param = 'MAIN_BOXES_".$db->escape($pos)."' AND value = '1'";
|
$sql .= " WHERE param = 'MAIN_BOXES_".$db->escape($pos)."' AND value = '1'";
|
||||||
$sql .= " AND entity = ".$conf->entity;
|
$sql .= " AND entity = ".$conf->entity;
|
||||||
dol_syslog("boxes.php search fk_user to activate box for", LOG_DEBUG);
|
dol_syslog("boxes.php search fk_user to activate box for", LOG_DEBUG);
|
||||||
$resql = $db->query($sql);
|
$resql = $db->query($sql);
|
||||||
if ($resql)
|
if ($resql) {
|
||||||
{
|
|
||||||
$num = $db->num_rows($resql);
|
$num = $db->num_rows($resql);
|
||||||
$i = 0;
|
$i = 0;
|
||||||
while ($i < $num)
|
while ($i < $num) {
|
||||||
{
|
|
||||||
$obj = $db->fetch_object($resql);
|
$obj = $db->fetch_object($resql);
|
||||||
$distinctfkuser[$obj->fk_user] = $obj->fk_user;
|
$distinctfkuser[$obj->fk_user] = $obj->fk_user;
|
||||||
$i++;
|
$i++;
|
||||||
@ -91,26 +88,28 @@ if ($action == 'add') {
|
|||||||
|
|
||||||
$distinctfkuser['0'] = '0'; // Add entry for fk_user = 0. We must use string as key and val
|
$distinctfkuser['0'] = '0'; // Add entry for fk_user = 0. We must use string as key and val
|
||||||
|
|
||||||
foreach ($distinctfkuser as $fk_user)
|
foreach ($distinctfkuser as $fk_user) {
|
||||||
{
|
if (!$error && $fk_user != '') {
|
||||||
if (!$error && $fk_user != '')
|
|
||||||
{
|
|
||||||
$arrayofexistingboxid = array();
|
$arrayofexistingboxid = array();
|
||||||
$nbboxonleft = $nbboxonright = 0;
|
$nbboxonleft = $nbboxonright = 0;
|
||||||
$sql = "SELECT box_id, box_order FROM ".MAIN_DB_PREFIX."boxes";
|
$sql = "SELECT box_id, box_order FROM ".MAIN_DB_PREFIX."boxes";
|
||||||
$sql .= " WHERE position = ".$pos." AND fk_user = ".$fk_user." AND entity = ".$conf->entity;
|
$sql .= " WHERE position = ".$pos." AND fk_user = ".$fk_user." AND entity = ".$conf->entity;
|
||||||
dol_syslog("boxes.php activate box", LOG_DEBUG);
|
dol_syslog("boxes.php activate box", LOG_DEBUG);
|
||||||
$resql = $db->query($sql);
|
$resql = $db->query($sql);
|
||||||
if ($resql)
|
if ($resql) {
|
||||||
{
|
while ($obj = $db->fetch_object($resql)) {
|
||||||
while ($obj = $db->fetch_object($resql))
|
|
||||||
{
|
|
||||||
$boxorder = $obj->box_order;
|
$boxorder = $obj->box_order;
|
||||||
if (preg_match('/A/', $boxorder)) $nbboxonleft++;
|
if (preg_match('/A/', $boxorder)) {
|
||||||
if (preg_match('/B/', $boxorder)) $nbboxonright++;
|
$nbboxonleft++;
|
||||||
|
}
|
||||||
|
if (preg_match('/B/', $boxorder)) {
|
||||||
|
$nbboxonright++;
|
||||||
|
}
|
||||||
$arrayofexistingboxid[$obj->box_id] = 1;
|
$arrayofexistingboxid[$obj->box_id] = 1;
|
||||||
}
|
}
|
||||||
} else dol_print_error($db);
|
} else {
|
||||||
|
dol_print_error($db);
|
||||||
|
}
|
||||||
|
|
||||||
if (empty($arrayofexistingboxid[$boxid['value']])) {
|
if (empty($arrayofexistingboxid[$boxid['value']])) {
|
||||||
$sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes (";
|
$sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes (";
|
||||||
@ -121,8 +120,7 @@ if ($action == 'add') {
|
|||||||
|
|
||||||
dol_syslog("boxes.php activate box", LOG_DEBUG);
|
dol_syslog("boxes.php activate box", LOG_DEBUG);
|
||||||
$resql = $db->query($sql);
|
$resql = $db->query($sql);
|
||||||
if (!$resql)
|
if (!$resql) {
|
||||||
{
|
|
||||||
setEventMessages($db->lasterror(), null, 'errors');
|
setEventMessages($db->lasterror(), null, 'errors');
|
||||||
$error++;
|
$error++;
|
||||||
}
|
}
|
||||||
@ -134,8 +132,7 @@ if ($action == 'add') {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!$error)
|
if (!$error) {
|
||||||
{
|
|
||||||
$db->commit();
|
$db->commit();
|
||||||
$action = '';
|
$action = '';
|
||||||
} else {
|
} else {
|
||||||
@ -143,15 +140,13 @@ if ($action == 'add') {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($action == 'delete')
|
if ($action == 'delete') {
|
||||||
{
|
|
||||||
$sql = "SELECT box_id FROM ".MAIN_DB_PREFIX."boxes";
|
$sql = "SELECT box_id FROM ".MAIN_DB_PREFIX."boxes";
|
||||||
$sql .= " WHERE rowid=".$rowid;
|
$sql .= " WHERE rowid=".((int) $rowid);
|
||||||
|
|
||||||
$resql = $db->query($sql);
|
$resql = $db->query($sql);
|
||||||
$obj = $db->fetch_object($resql);
|
$obj = $db->fetch_object($resql);
|
||||||
if (!empty($obj->box_id))
|
if (!empty($obj->box_id)) {
|
||||||
{
|
|
||||||
$db->begin();
|
$db->begin();
|
||||||
|
|
||||||
// Remove all personalized setup when a box is activated or disabled (why removing all ? We removed only removed boxes)
|
// Remove all personalized setup when a box is activated or disabled (why removing all ? We removed only removed boxes)
|
||||||
@ -169,8 +164,7 @@ if ($action == 'delete')
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($action == 'switch')
|
if ($action == 'switch') {
|
||||||
{
|
|
||||||
// We switch values of field box_order for the 2 lines of table boxes
|
// We switch values of field box_order for the 2 lines of table boxes
|
||||||
$db->begin();
|
$db->begin();
|
||||||
|
|
||||||
@ -182,12 +176,10 @@ if ($action == 'switch')
|
|||||||
|
|
||||||
$resultupdatefrom = 0;
|
$resultupdatefrom = 0;
|
||||||
$resultupdateto = 0;
|
$resultupdateto = 0;
|
||||||
if (is_object($objfrom) && is_object($objto))
|
if (is_object($objfrom) && is_object($objto)) {
|
||||||
{
|
|
||||||
$newfirst = $objto->box_order;
|
$newfirst = $objto->box_order;
|
||||||
$newsecond = $objfrom->box_order;
|
$newsecond = $objfrom->box_order;
|
||||||
if ($newfirst == $newsecond)
|
if ($newfirst == $newsecond) {
|
||||||
{
|
|
||||||
$newsecondchar = preg_replace('/[0-9]+/', '', $newsecond);
|
$newsecondchar = preg_replace('/[0-9]+/', '', $newsecond);
|
||||||
$newsecondnum = preg_replace('/[a-zA-Z]+/', '', $newsecond);
|
$newsecondnum = preg_replace('/[a-zA-Z]+/', '', $newsecond);
|
||||||
$newsecond = sprintf("%s%02d", $newsecondchar ? $newsecondchar : 'A', $newsecondnum + 1);
|
$newsecond = sprintf("%s%02d", $newsecondchar ? $newsecondchar : 'A', $newsecondnum + 1);
|
||||||
@ -195,16 +187,19 @@ if ($action == 'switch')
|
|||||||
$sql = "UPDATE ".MAIN_DB_PREFIX."boxes SET box_order='".$db->escape($newfirst)."' WHERE rowid=".((int) $objfrom->rowid);
|
$sql = "UPDATE ".MAIN_DB_PREFIX."boxes SET box_order='".$db->escape($newfirst)."' WHERE rowid=".((int) $objfrom->rowid);
|
||||||
dol_syslog($sql);
|
dol_syslog($sql);
|
||||||
$resultupdatefrom = $db->query($sql);
|
$resultupdatefrom = $db->query($sql);
|
||||||
if (!$resultupdatefrom) { dol_print_error($db); }
|
if (!$resultupdatefrom) {
|
||||||
|
dol_print_error($db);
|
||||||
|
}
|
||||||
|
|
||||||
$sql = "UPDATE ".MAIN_DB_PREFIX."boxes SET box_order='".$db->escape($newsecond)."' WHERE rowid=".((int) $objto->rowid);
|
$sql = "UPDATE ".MAIN_DB_PREFIX."boxes SET box_order='".$db->escape($newsecond)."' WHERE rowid=".((int) $objto->rowid);
|
||||||
dol_syslog($sql);
|
dol_syslog($sql);
|
||||||
$resultupdateto = $db->query($sql);
|
$resultupdateto = $db->query($sql);
|
||||||
if (!$resultupdateto) { dol_print_error($db); }
|
if (!$resultupdateto) {
|
||||||
|
dol_print_error($db);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($resultupdatefrom && $resultupdateto)
|
if ($resultupdatefrom && $resultupdateto) {
|
||||||
{
|
|
||||||
$db->commit();
|
$db->commit();
|
||||||
} else {
|
} else {
|
||||||
$db->rollback();
|
$db->rollback();
|
||||||
@ -241,33 +236,31 @@ $sql .= " ORDER by b.position, b.box_order";
|
|||||||
|
|
||||||
dol_syslog("Search available boxes", LOG_DEBUG);
|
dol_syslog("Search available boxes", LOG_DEBUG);
|
||||||
$resql = $db->query($sql);
|
$resql = $db->query($sql);
|
||||||
if ($resql)
|
if ($resql) {
|
||||||
{
|
|
||||||
$num = $db->num_rows($resql);
|
$num = $db->num_rows($resql);
|
||||||
|
|
||||||
// Check record to know if we must recalculate sort order
|
// Check record to know if we must recalculate sort order
|
||||||
$i = 0;
|
$i = 0;
|
||||||
$decalage = 0;
|
$decalage = 0;
|
||||||
while ($i < $num)
|
while ($i < $num) {
|
||||||
{
|
|
||||||
$obj = $db->fetch_object($resql);
|
$obj = $db->fetch_object($resql);
|
||||||
$boxes[$obj->position][$obj->box_id] = 1;
|
$boxes[$obj->position][$obj->box_id] = 1;
|
||||||
$i++;
|
$i++;
|
||||||
|
|
||||||
array_push($actives, $obj->box_id);
|
array_push($actives, $obj->box_id);
|
||||||
|
|
||||||
if ($obj->box_order == '' || $obj->box_order == '0' || $decalage) $decalage++;
|
if ($obj->box_order == '' || $obj->box_order == '0' || $decalage) {
|
||||||
|
$decalage++;
|
||||||
|
}
|
||||||
// We renumber the order of the boxes if one of them is in ''
|
// We renumber the order of the boxes if one of them is in ''
|
||||||
// This occurs just after an insert.
|
// This occurs just after an insert.
|
||||||
if ($decalage)
|
if ($decalage) {
|
||||||
{
|
|
||||||
$sql = "UPDATE ".MAIN_DB_PREFIX."boxes SET box_order='".$db->escape($decalage)."' WHERE rowid=".$obj->rowid;
|
$sql = "UPDATE ".MAIN_DB_PREFIX."boxes SET box_order='".$db->escape($decalage)."' WHERE rowid=".$obj->rowid;
|
||||||
$db->query($sql);
|
$db->query($sql);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($decalage)
|
if ($decalage) {
|
||||||
{
|
|
||||||
// If we have renumbered, we correct the field box_order
|
// If we have renumbered, we correct the field box_order
|
||||||
// This occurs just after an insert.
|
// This occurs just after an insert.
|
||||||
$sql = "SELECT box_order";
|
$sql = "SELECT box_order";
|
||||||
@ -277,32 +270,24 @@ if ($resql)
|
|||||||
|
|
||||||
dol_syslog("Execute requests to renumber box order", LOG_DEBUG);
|
dol_syslog("Execute requests to renumber box order", LOG_DEBUG);
|
||||||
$result = $db->query($sql);
|
$result = $db->query($sql);
|
||||||
if ($result)
|
if ($result) {
|
||||||
{
|
while ($record = $db->fetch_array($result)) {
|
||||||
while ($record = $db->fetch_array($result))
|
if (dol_strlen($record['box_order']) == 1) {
|
||||||
{
|
if (preg_match("/[13579]{1}/", substr($record['box_order'], -1))) {
|
||||||
if (dol_strlen($record['box_order']) == 1)
|
|
||||||
{
|
|
||||||
if (preg_match("/[13579]{1}/", substr($record['box_order'], -1)))
|
|
||||||
{
|
|
||||||
$box_order = "A0".$record['box_order'];
|
$box_order = "A0".$record['box_order'];
|
||||||
$sql = "UPDATE ".MAIN_DB_PREFIX."boxes SET box_order = '".$db->escape($box_order)."' WHERE entity = ".$conf->entity." AND box_order = '".$db->escape($record['box_order'])."'";
|
$sql = "UPDATE ".MAIN_DB_PREFIX."boxes SET box_order = '".$db->escape($box_order)."' WHERE entity = ".$conf->entity." AND box_order = '".$db->escape($record['box_order'])."'";
|
||||||
$resql = $db->query($sql);
|
$resql = $db->query($sql);
|
||||||
} elseif (preg_match("/[02468]{1}/", substr($record['box_order'], -1)))
|
} elseif (preg_match("/[02468]{1}/", substr($record['box_order'], -1))) {
|
||||||
{
|
|
||||||
$box_order = "B0".$record['box_order'];
|
$box_order = "B0".$record['box_order'];
|
||||||
$sql = "UPDATE ".MAIN_DB_PREFIX."boxes SET box_order = '".$db->escape($box_order)."' WHERE entity = ".$conf->entity." AND box_order = '".$db->escape($record['box_order'])."'";
|
$sql = "UPDATE ".MAIN_DB_PREFIX."boxes SET box_order = '".$db->escape($box_order)."' WHERE entity = ".$conf->entity." AND box_order = '".$db->escape($record['box_order'])."'";
|
||||||
$resql = $db->query($sql);
|
$resql = $db->query($sql);
|
||||||
}
|
}
|
||||||
} elseif (dol_strlen($record['box_order']) == 2)
|
} elseif (dol_strlen($record['box_order']) == 2) {
|
||||||
{
|
if (preg_match("/[13579]{1}/", substr($record['box_order'], -1))) {
|
||||||
if (preg_match("/[13579]{1}/", substr($record['box_order'], -1)))
|
|
||||||
{
|
|
||||||
$box_order = "A".$record['box_order'];
|
$box_order = "A".$record['box_order'];
|
||||||
$sql = "UPDATE ".MAIN_DB_PREFIX."boxes SET box_order = '".$db->escape($box_order)."' WHERE entity = ".$conf->entity." AND box_order = '".$db->escape($record['box_order'])."'";
|
$sql = "UPDATE ".MAIN_DB_PREFIX."boxes SET box_order = '".$db->escape($box_order)."' WHERE entity = ".$conf->entity." AND box_order = '".$db->escape($record['box_order'])."'";
|
||||||
$resql = $db->query($sql);
|
$resql = $db->query($sql);
|
||||||
} elseif (preg_match("/[02468]{1}/", substr($record['box_order'], -1)))
|
} elseif (preg_match("/[02468]{1}/", substr($record['box_order'], -1))) {
|
||||||
{
|
|
||||||
$box_order = "B".$record['box_order'];
|
$box_order = "B".$record['box_order'];
|
||||||
$sql = "UPDATE ".MAIN_DB_PREFIX."boxes SET box_order = '".$db->escape($box_order)."' WHERE entity = ".$conf->entity." AND box_order = '".$db->escape($record['box_order'])."'";
|
$sql = "UPDATE ".MAIN_DB_PREFIX."boxes SET box_order = '".$db->escape($box_order)."' WHERE entity = ".$conf->entity." AND box_order = '".$db->escape($record['box_order'])."'";
|
||||||
$resql = $db->query($sql);
|
$resql = $db->query($sql);
|
||||||
@ -337,10 +322,8 @@ print '<td>'.$langs->trans("SourceFile").'</td>';
|
|||||||
print '<td width="160" class="center">'.$langs->trans("ActivateOn").'</td>';
|
print '<td width="160" class="center">'.$langs->trans("ActivateOn").'</td>';
|
||||||
print "</tr>\n";
|
print "</tr>\n";
|
||||||
|
|
||||||
foreach ($boxtoadd as $box)
|
foreach ($boxtoadd as $box) {
|
||||||
{
|
if (preg_match('/^([^@]+)@([^@]+)$/i', $box->boximg)) {
|
||||||
if (preg_match('/^([^@]+)@([^@]+)$/i', $box->boximg))
|
|
||||||
{
|
|
||||||
$logo = $box->boximg;
|
$logo = $box->boximg;
|
||||||
} else {
|
} else {
|
||||||
$logo = preg_replace("/^object_/i", "", $box->boximg);
|
$logo = preg_replace("/^object_/i", "", $box->boximg);
|
||||||
@ -349,14 +332,17 @@ foreach ($boxtoadd as $box)
|
|||||||
print "\n".'<!-- Box '.$box->boxcode.' -->'."\n";
|
print "\n".'<!-- Box '.$box->boxcode.' -->'."\n";
|
||||||
print '<tr class="oddeven">'."\n";
|
print '<tr class="oddeven">'."\n";
|
||||||
print '<td>'.img_object("", $logo, 'height="14px"').' '.$langs->transnoentitiesnoconv($box->boxlabel);
|
print '<td>'.img_object("", $logo, 'height="14px"').' '.$langs->transnoentitiesnoconv($box->boxlabel);
|
||||||
if (!empty($box->class) && preg_match('/graph_/', $box->class)) print ' ('.$langs->trans("Graph").')';
|
if (!empty($box->class) && preg_match('/graph_/', $box->class)) {
|
||||||
|
print ' ('.$langs->trans("Graph").')';
|
||||||
|
}
|
||||||
print '</td>'."\n";
|
print '</td>'."\n";
|
||||||
print '<td>';
|
print '<td>';
|
||||||
if ($box->note == '(WarningUsingThisBoxSlowDown)')
|
if ($box->note == '(WarningUsingThisBoxSlowDown)') {
|
||||||
{
|
|
||||||
$langs->load("errors");
|
$langs->load("errors");
|
||||||
print $langs->trans("WarningUsingThisBoxSlowDown");
|
print $langs->trans("WarningUsingThisBoxSlowDown");
|
||||||
} else print ($box->note ? $box->note : ' ');
|
} else {
|
||||||
|
print ($box->note ? $box->note : ' ');
|
||||||
|
}
|
||||||
print '</td>'."\n";
|
print '</td>'."\n";
|
||||||
print '<td>'.$box->sourcefile.'</td>'."\n";
|
print '<td>'.$box->sourcefile.'</td>'."\n";
|
||||||
|
|
||||||
@ -368,8 +354,7 @@ foreach ($boxtoadd as $box)
|
|||||||
|
|
||||||
print '</tr>'."\n";
|
print '</tr>'."\n";
|
||||||
}
|
}
|
||||||
if (!count($boxtoadd) && count($boxactivated))
|
if (!count($boxtoadd) && count($boxactivated)) {
|
||||||
{
|
|
||||||
print '<tr><td class="opacitymedium" colspan="4">'.$langs->trans("AllWidgetsWereEnabled").'</td></tr>';
|
print '<tr><td class="opacitymedium" colspan="4">'.$langs->trans("AllWidgetsWereEnabled").'</td></tr>';
|
||||||
}
|
}
|
||||||
print '</table>'."\n";
|
print '</table>'."\n";
|
||||||
@ -399,10 +384,8 @@ print '</tr>'."\n";
|
|||||||
|
|
||||||
$box_order = 1;
|
$box_order = 1;
|
||||||
$foundrupture = 1;
|
$foundrupture = 1;
|
||||||
foreach ($boxactivated as $key => $box)
|
foreach ($boxactivated as $key => $box) {
|
||||||
{
|
if (preg_match('/^([^@]+)@([^@]+)$/i', $box->boximg)) {
|
||||||
if (preg_match('/^([^@]+)@([^@]+)$/i', $box->boximg))
|
|
||||||
{
|
|
||||||
$logo = $box->boximg;
|
$logo = $box->boximg;
|
||||||
} else {
|
} else {
|
||||||
$logo = preg_replace("/^object_/i", "", $box->boximg);
|
$logo = preg_replace("/^object_/i", "", $box->boximg);
|
||||||
@ -411,14 +394,17 @@ foreach ($boxactivated as $key => $box)
|
|||||||
print "\n".'<!-- Box '.$box->boxcode.' -->'."\n";
|
print "\n".'<!-- Box '.$box->boxcode.' -->'."\n";
|
||||||
print '<tr class="oddeven">';
|
print '<tr class="oddeven">';
|
||||||
print '<td>'.img_object("", $logo, 'height="14px"').' '.$langs->transnoentitiesnoconv($box->boxlabel);
|
print '<td>'.img_object("", $logo, 'height="14px"').' '.$langs->transnoentitiesnoconv($box->boxlabel);
|
||||||
if (!empty($box->class) && preg_match('/graph_/', $box->class)) print ' ('.$langs->trans("Graph").')';
|
if (!empty($box->class) && preg_match('/graph_/', $box->class)) {
|
||||||
|
print ' ('.$langs->trans("Graph").')';
|
||||||
|
}
|
||||||
print '</td>';
|
print '</td>';
|
||||||
print '<td>';
|
print '<td>';
|
||||||
if ($box->note == '(WarningUsingThisBoxSlowDown)')
|
if ($box->note == '(WarningUsingThisBoxSlowDown)') {
|
||||||
{
|
|
||||||
$langs->load("errors");
|
$langs->load("errors");
|
||||||
print img_warning('', 0).' '.$langs->trans("WarningUsingThisBoxSlowDown");
|
print img_warning('', 0).' '.$langs->trans("WarningUsingThisBoxSlowDown");
|
||||||
} else print ($box->note ? $box->note : ' ');
|
} else {
|
||||||
|
print ($box->note ? $box->note : ' ');
|
||||||
|
}
|
||||||
print '</td>';
|
print '</td>';
|
||||||
print '<td class="center">'.(empty($pos_name[$box->position]) ? '' : $langs->trans($pos_name[$box->position])).'</td>';
|
print '<td class="center">'.(empty($pos_name[$box->position]) ? '' : $langs->trans($pos_name[$box->position])).'</td>';
|
||||||
$hasnext = ($key < (count($boxactivated) - 1));
|
$hasnext = ($key < (count($boxactivated) - 1));
|
||||||
@ -447,6 +433,7 @@ print load_fiche_titre($langs->trans("Other"), '', '');
|
|||||||
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="addconst">';
|
print '<input type="hidden" name="action" value="addconst">';
|
||||||
|
print '<div class="div-table-responsive-no-min">';
|
||||||
print '<table class="noborder centpercent">';
|
print '<table class="noborder centpercent">';
|
||||||
|
|
||||||
print '<tr class="liste_titre">';
|
print '<tr class="liste_titre">';
|
||||||
@ -472,9 +459,10 @@ if ($conf->global->MAIN_FEATURES_LEVEL == 2 || !empty($conf->global->MAIN_ACTIVA
|
|||||||
}
|
}
|
||||||
|
|
||||||
print '</table>';
|
print '</table>';
|
||||||
|
print '</div>';
|
||||||
|
|
||||||
print '<br>';
|
print '<br>';
|
||||||
print '<div class="center"><input type="submit" class="button" value="'.$langs->trans("Save").'" name="Button"></div>';
|
print '<div class="center"><input type="submit" class="button button-save" value="'.$langs->trans("Save").'" name="Button"></div>';
|
||||||
print '<br>';
|
print '<br>';
|
||||||
|
|
||||||
print '</form>';
|
print '</form>';
|
||||||
|
|||||||
@ -168,8 +168,10 @@ foreach ($dirmodels as $reldir)
|
|||||||
// Show example of numbering module
|
// Show example of numbering module
|
||||||
print '<td class="nowrap">';
|
print '<td class="nowrap">';
|
||||||
$tmp = $module->getExample();
|
$tmp = $module->getExample();
|
||||||
if (preg_match('/^Error/', $tmp)) print '<div class="error">'.$langs->trans($tmp).'</div>';
|
if (preg_match('/^Error/', $tmp)) {
|
||||||
elseif ($tmp == 'NotConfigured') print $langs->trans($tmp);
|
$langs->load("errors");
|
||||||
|
print '<div class="error">'.$langs->trans($tmp).'</div>';
|
||||||
|
} elseif ($tmp == 'NotConfigured') print $langs->trans($tmp);
|
||||||
else print $tmp;
|
else print $tmp;
|
||||||
print '</td>'."\n";
|
print '</td>'."\n";
|
||||||
|
|
||||||
|
|||||||
@ -111,11 +111,9 @@ if ($action == 'updateMask')
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Activate a model
|
// Activate a model
|
||||||
elseif ($action == 'set')
|
elseif ($action == 'set') {
|
||||||
{
|
|
||||||
$ret = addDocumentModel($value, $type, $label, $scandir);
|
$ret = addDocumentModel($value, $type, $label, $scandir);
|
||||||
} elseif ($action == 'del')
|
} elseif ($action == 'del') {
|
||||||
{
|
|
||||||
$ret = delDocumentModel($value, $type);
|
$ret = delDocumentModel($value, $type);
|
||||||
if ($ret > 0)
|
if ($ret > 0)
|
||||||
{
|
{
|
||||||
@ -124,8 +122,7 @@ elseif ($action == 'set')
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Set default model
|
// Set default model
|
||||||
elseif ($action == 'setdoc')
|
elseif ($action == 'setdoc') {
|
||||||
{
|
|
||||||
if (dolibarr_set_const($db, "COMMANDE_ADDON_PDF", $value, 'chaine', 0, '', $conf->entity))
|
if (dolibarr_set_const($db, "COMMANDE_ADDON_PDF", $value, 'chaine', 0, '', $conf->entity))
|
||||||
{
|
{
|
||||||
// The constant that was read before the new set
|
// The constant that was read before the new set
|
||||||
@ -139,8 +136,7 @@ elseif ($action == 'setdoc')
|
|||||||
{
|
{
|
||||||
$ret = addDocumentModel($value, $type, $label, $scandir);
|
$ret = addDocumentModel($value, $type, $label, $scandir);
|
||||||
}
|
}
|
||||||
} elseif ($action == 'setmod')
|
} elseif ($action == 'setmod') {
|
||||||
{
|
|
||||||
// TODO Check if numbering module chosen can be activated
|
// TODO Check if numbering module chosen can be activated
|
||||||
// by calling method canBeActivated
|
// by calling method canBeActivated
|
||||||
|
|
||||||
@ -254,6 +250,7 @@ print dol_get_fiche_head($head, 'general', $langs->trans("Orders"), -1, 'order')
|
|||||||
|
|
||||||
print load_fiche_titre($langs->trans("OrdersNumberingModules"), '', '');
|
print load_fiche_titre($langs->trans("OrdersNumberingModules"), '', '');
|
||||||
|
|
||||||
|
print '<div class="div-table-responsive-no-min">';
|
||||||
print '<table class="noborder centpercent">';
|
print '<table class="noborder centpercent">';
|
||||||
print '<tr class="liste_titre">';
|
print '<tr class="liste_titre">';
|
||||||
print '<td>'.$langs->trans("Name").'</td>';
|
print '<td>'.$langs->trans("Name").'</td>';
|
||||||
@ -297,8 +294,10 @@ foreach ($dirmodels as $reldir)
|
|||||||
// Show example of numbering model
|
// Show example of numbering model
|
||||||
print '<td class="nowrap">';
|
print '<td class="nowrap">';
|
||||||
$tmp = $module->getExample();
|
$tmp = $module->getExample();
|
||||||
if (preg_match('/^Error/', $tmp)) print '<div class="error">'.$langs->trans($tmp).'</div>';
|
if (preg_match('/^Error/', $tmp)) {
|
||||||
elseif ($tmp == 'NotConfigured') print $langs->trans($tmp);
|
$langs->load("errors");
|
||||||
|
print '<div class="error">'.$langs->trans($tmp).'</div>';
|
||||||
|
} elseif ($tmp == 'NotConfigured') print $langs->trans($tmp);
|
||||||
else print $tmp;
|
else print $tmp;
|
||||||
print '</td>'."\n";
|
print '</td>'."\n";
|
||||||
|
|
||||||
@ -344,7 +343,7 @@ foreach ($dirmodels as $reldir)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
print "</table><br>\n";
|
print "</table></div><br>\n";
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -375,6 +374,7 @@ if ($resql)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
print '<div class="div-table-responsive-no-min">';
|
||||||
print "<table class=\"noborder\" width=\"100%\">\n";
|
print "<table class=\"noborder\" width=\"100%\">\n";
|
||||||
print "<tr class=\"liste_titre\">\n";
|
print "<tr class=\"liste_titre\">\n";
|
||||||
print '<td>'.$langs->trans("Name").'</td>';
|
print '<td>'.$langs->trans("Name").'</td>';
|
||||||
@ -482,7 +482,7 @@ foreach ($dirmodels as $reldir)
|
|||||||
print '<td class="center">';
|
print '<td class="center">';
|
||||||
if ($module->type == 'pdf')
|
if ($module->type == 'pdf')
|
||||||
{
|
{
|
||||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=specimen&module='.$name.'">'.img_object($langs->trans("Preview"), 'bill').'</a>';
|
print '<a href="'.$_SERVER["PHP_SELF"].'?action=specimen&module='.$name.'">'.img_object($langs->trans("Preview"), 'pdf').'</a>';
|
||||||
} else {
|
} else {
|
||||||
print img_object($langs->trans("PreviewNotAvailable"), 'generic');
|
print img_object($langs->trans("PreviewNotAvailable"), 'generic');
|
||||||
}
|
}
|
||||||
@ -499,6 +499,7 @@ foreach ($dirmodels as $reldir)
|
|||||||
}
|
}
|
||||||
|
|
||||||
print '</table>';
|
print '</table>';
|
||||||
|
print '</div>';
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@ -178,13 +178,6 @@ if (($action == 'update' && !GETPOST("cancel", 'alpha'))
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_FACEBOOK_URL", GETPOST("facebookurl", 'alpha'), 'chaine', 0, '', $conf->entity);
|
|
||||||
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_TWITTER_URL", GETPOST("twitterurl", 'alpha'), 'chaine', 0, '', $conf->entity);
|
|
||||||
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_LINKEDIN_URL", GETPOST("linkedinurl", 'alpha'), 'chaine', 0, '', $conf->entity);
|
|
||||||
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_INSTAGRAM_URL", GETPOST("instagramurl", 'alpha'), 'chaine', 0, '', $conf->entity);
|
|
||||||
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_YOUTUBE_URL", GETPOST("youtubeurl", 'alpha'), 'chaine', 0, '', $conf->entity);
|
|
||||||
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_GITHUB_URL", GETPOST("githuburl", 'alpha'), 'chaine', 0, '', $conf->entity);
|
|
||||||
|
|
||||||
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_MANAGERS", GETPOST("MAIN_INFO_SOCIETE_MANAGERS", 'nohtml'), 'chaine', 0, '', $conf->entity);
|
dolibarr_set_const($db, "MAIN_INFO_SOCIETE_MANAGERS", GETPOST("MAIN_INFO_SOCIETE_MANAGERS", 'nohtml'), 'chaine', 0, '', $conf->entity);
|
||||||
dolibarr_set_const($db, "MAIN_INFO_GDPR", GETPOST("MAIN_INFO_GDPR", 'nohtml'), 'chaine', 0, '', $conf->entity);
|
dolibarr_set_const($db, "MAIN_INFO_GDPR", GETPOST("MAIN_INFO_GDPR", 'nohtml'), 'chaine', 0, '', $conf->entity);
|
||||||
dolibarr_set_const($db, "MAIN_INFO_CAPITAL", GETPOST("capital", 'nohtml'), 'chaine', 0, '', $conf->entity);
|
dolibarr_set_const($db, "MAIN_INFO_CAPITAL", GETPOST("capital", 'nohtml'), 'chaine', 0, '', $conf->entity);
|
||||||
@ -406,11 +399,12 @@ print '<input name="nom" id="name" class="minwidth200" value="'.dol_escape_htmlt
|
|||||||
print '<tr class="oddeven"><td><label for="MAIN_INFO_SOCIETE_ADDRESS">'.$langs->trans("CompanyAddress").'</label></td><td>';
|
print '<tr class="oddeven"><td><label for="MAIN_INFO_SOCIETE_ADDRESS">'.$langs->trans("CompanyAddress").'</label></td><td>';
|
||||||
print '<textarea name="MAIN_INFO_SOCIETE_ADDRESS" id="MAIN_INFO_SOCIETE_ADDRESS" class="quatrevingtpercent" rows="'.ROWS_3.'">'.($conf->global->MAIN_INFO_SOCIETE_ADDRESS ? $conf->global->MAIN_INFO_SOCIETE_ADDRESS : GETPOST("MAIN_INFO_SOCIETE_ADDRESS", 'nohtml')).'</textarea></td></tr>'."\n";
|
print '<textarea name="MAIN_INFO_SOCIETE_ADDRESS" id="MAIN_INFO_SOCIETE_ADDRESS" class="quatrevingtpercent" rows="'.ROWS_3.'">'.($conf->global->MAIN_INFO_SOCIETE_ADDRESS ? $conf->global->MAIN_INFO_SOCIETE_ADDRESS : GETPOST("MAIN_INFO_SOCIETE_ADDRESS", 'nohtml')).'</textarea></td></tr>'."\n";
|
||||||
|
|
||||||
|
// Zip
|
||||||
print '<tr class="oddeven"><td><label for="MAIN_INFO_SOCIETE_ZIP">'.$langs->trans("CompanyZip").'</label></td><td>';
|
print '<tr class="oddeven"><td><label for="MAIN_INFO_SOCIETE_ZIP">'.$langs->trans("CompanyZip").'</label></td><td>';
|
||||||
print '<input class="minwidth100" name="MAIN_INFO_SOCIETE_ZIP" id="MAIN_INFO_SOCIETE_ZIP" value="'.dol_escape_htmltag($conf->global->MAIN_INFO_SOCIETE_ZIP ? $conf->global->MAIN_INFO_SOCIETE_ZIP : GETPOST("MAIN_INFO_SOCIETE_ZIP", 'alpha')).'"></td></tr>'."\n";
|
print '<input class="width100" name="MAIN_INFO_SOCIETE_ZIP" id="MAIN_INFO_SOCIETE_ZIP" value="'.dol_escape_htmltag($conf->global->MAIN_INFO_SOCIETE_ZIP ? $conf->global->MAIN_INFO_SOCIETE_ZIP : GETPOST("MAIN_INFO_SOCIETE_ZIP", 'alpha')).'"></td></tr>'."\n";
|
||||||
|
|
||||||
print '<tr class="oddeven"><td><label for="MAIN_INFO_SOCIETE_TOWN">'.$langs->trans("CompanyTown").'</label></td><td>';
|
print '<tr class="oddeven"><td><label for="MAIN_INFO_SOCIETE_TOWN">'.$langs->trans("CompanyTown").'</label></td><td>';
|
||||||
print '<input name="MAIN_INFO_SOCIETE_TOWN" class="minwidth100" id="MAIN_INFO_SOCIETE_TOWN" value="'.dol_escape_htmltag($conf->global->MAIN_INFO_SOCIETE_TOWN ? $conf->global->MAIN_INFO_SOCIETE_TOWN : GETPOST("MAIN_INFO_SOCIETE_TOWN", 'nohtml')).'"></td></tr>'."\n";
|
print '<input name="MAIN_INFO_SOCIETE_TOWN" class="minwidth200" id="MAIN_INFO_SOCIETE_TOWN" value="'.dol_escape_htmltag($conf->global->MAIN_INFO_SOCIETE_TOWN ? $conf->global->MAIN_INFO_SOCIETE_TOWN : GETPOST("MAIN_INFO_SOCIETE_TOWN", 'nohtml')).'"></td></tr>'."\n";
|
||||||
|
|
||||||
// Country
|
// Country
|
||||||
print '<tr class="oddeven"><td class="fieldrequired"><label for="selectcountry_id">'.$langs->trans("Country").'</label></td><td class="maxwidthonsmartphone">';
|
print '<tr class="oddeven"><td class="fieldrequired"><label for="selectcountry_id">'.$langs->trans("Country").'</label></td><td class="maxwidthonsmartphone">';
|
||||||
@ -477,6 +471,14 @@ if (!empty($mysoc->logo_small)) {
|
|||||||
print '<div class="inline-block valignmiddle">';
|
print '<div class="inline-block valignmiddle">';
|
||||||
print '<img style="max-height: 80px" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&file='.urlencode('logos/thumbs/'.$mysoc->logo_small).'">';
|
print '<img style="max-height: 80px" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&file='.urlencode('logos/thumbs/'.$mysoc->logo_small).'">';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
} elseif (!empty($mysoc->logo)) {
|
||||||
|
if (!file_exists($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_mini)) {
|
||||||
|
$imgThumbMini = vignette($conf->mycompany->dir_output.'/logos/'.$mysoc->logo, $maxwidthmini, $maxheightmini, '_mini', $quality);
|
||||||
|
}
|
||||||
|
$imgThumbSmall = vignette($conf->mycompany->dir_output.'/logos/'.$mysoc->logo, $maxwidthmini, $maxheightmini, '_small', $quality);
|
||||||
|
print '<div class="inline-block valignmiddle">';
|
||||||
|
print '<img style="max-height: 80px" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&file='.urlencode('logos/thumbs/'.basename($imgThumbSmall)).'">';
|
||||||
|
print '</div>';
|
||||||
}
|
}
|
||||||
print '<div class="inline-block valignmiddle marginrightonly"><a class="reposition" href="'.$_SERVER["PHP_SELF"].'?action=removelogo">'.img_delete($langs->trans("Delete"), '', 'marginleftonly').'</a></div>';
|
print '<div class="inline-block valignmiddle marginrightonly"><a class="reposition" href="'.$_SERVER["PHP_SELF"].'?action=removelogo">'.img_delete($langs->trans("Delete"), '', 'marginleftonly').'</a></div>';
|
||||||
} elseif (!empty($mysoc->logo)) {
|
} elseif (!empty($mysoc->logo)) {
|
||||||
@ -504,6 +506,14 @@ if (!empty($mysoc->logo_squarred_small)) {
|
|||||||
print '<div class="inline-block valignmiddle marginrightonly">';
|
print '<div class="inline-block valignmiddle marginrightonly">';
|
||||||
print '<img style="max-height: 80px" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&file='.urlencode('logos/thumbs/'.$mysoc->logo_squarred_small).'">';
|
print '<img style="max-height: 80px" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&file='.urlencode('logos/thumbs/'.$mysoc->logo_squarred_small).'">';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
} elseif (!empty($mysoc->logo_squarred)) {
|
||||||
|
if (!file_exists($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_squarred_mini)) {
|
||||||
|
$imgThumbMini = vignette($conf->mycompany->dir_output.'/logos/'.$mysoc->logo_squarred, $maxwidthmini, $maxheightmini, '_mini', $quality);
|
||||||
|
}
|
||||||
|
$imgThumbSmall = vignette($conf->mycompany->dir_output.'/logos/'.$mysoc->logo_squarred, $maxwidthmini, $maxheightmini, '_small', $quality);
|
||||||
|
print '<div class="inline-block valignmiddle">';
|
||||||
|
print '<img style="max-height: 80px" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&file='.urlencode('logos/thumbs/'.basename($imgThumbSmall)).'">';
|
||||||
|
print '</div>';
|
||||||
}
|
}
|
||||||
print '<div class="inline-block valignmiddle marginrightonly"><a class="reposition" href="'.$_SERVER["PHP_SELF"].'?action=removelogosquarred">'.img_delete($langs->trans("Delete"), '', 'marginleftonly').'</a></div>';
|
print '<div class="inline-block valignmiddle marginrightonly"><a class="reposition" href="'.$_SERVER["PHP_SELF"].'?action=removelogosquarred">'.img_delete($langs->trans("Delete"), '', 'marginleftonly').'</a></div>';
|
||||||
} elseif (!empty($mysoc->logo_squarred)) {
|
} elseif (!empty($mysoc->logo_squarred)) {
|
||||||
@ -529,25 +539,6 @@ print '</td></tr>';
|
|||||||
|
|
||||||
print '</table>';
|
print '</table>';
|
||||||
|
|
||||||
// Social networks
|
|
||||||
print '<br>';
|
|
||||||
print '<table class="noborder centpercent editmode">';
|
|
||||||
print '<tr class="liste_titre">';
|
|
||||||
print '<td class="titlefield">'.$langs->trans("SocialNetworksInformation").'</td><td>'.$langs->trans("Value").'</td>';
|
|
||||||
print "</tr>\n";
|
|
||||||
|
|
||||||
$listofnetworks = array('facebook'=>'facebook', 'twitter'=>'twitter', 'linkedin'=>'linkedin', 'instagram'=>'instagram', 'youtube'=>'youtube', 'github'=>'github');
|
|
||||||
foreach ($listofnetworks as $networkkey => $networkicon) {
|
|
||||||
print '<tr class="oddeven"><td>';
|
|
||||||
print '<label for="'.$networkkey.'url">'.$langs->trans("SocialNetworks".ucfirst($networkkey)."URL").'</label></td><td>';
|
|
||||||
$networkconst = 'MAIN_INFO_SOCIETE_'.strtoupper($networkkey).'_URL';
|
|
||||||
print '<span class="fa paddingright fa-'.($networkicon ? $networkicon : 'link').'"></span>';
|
|
||||||
print '<input name="'.$networkkey.'url" id="'.$networkkey.'url" class="minwidth300" value="'.dol_escape_htmltag($conf->global->$networkconst).'"></td></tr>';
|
|
||||||
print '</td></tr>'."\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
print "</table>";
|
|
||||||
|
|
||||||
print '<br>';
|
print '<br>';
|
||||||
|
|
||||||
// IDs of the company (country-specific)
|
// IDs of the company (country-specific)
|
||||||
@ -694,7 +685,7 @@ print '<td class="right"> </td>';
|
|||||||
print "</tr>\n";
|
print "</tr>\n";
|
||||||
|
|
||||||
// Main tax
|
// Main tax
|
||||||
print "<tr class=\"oddeven\"><td width=\"140\"><label><input type=\"radio\" name=\"optiontva\" id=\"use_vat\" value=\"1\"".(empty($conf->global->FACTURE_TVAOPTION) ? "" : " checked")."> ".$langs->trans("VATIsUsed")."</label></td>";
|
print '<tr class="oddeven"><td width="140"><label><input type="radio" name="optiontva" id="use_vat" value="1"'.(empty($conf->global->FACTURE_TVAOPTION) ? "" : " checked")."> ".$langs->trans("VATIsUsed")."</label></td>";
|
||||||
print '<td colspan="2">';
|
print '<td colspan="2">';
|
||||||
$tooltiphelp = '';
|
$tooltiphelp = '';
|
||||||
if ($mysoc->country_code == 'FR') $tooltiphelp = '<i>'.$langs->trans("Example").': '.$langs->trans("VATIsUsedExampleFR")."</i>";
|
if ($mysoc->country_code == 'FR') $tooltiphelp = '<i>'.$langs->trans("Example").': '.$langs->trans("VATIsUsedExampleFR")."</i>";
|
||||||
@ -702,7 +693,7 @@ print "<label for=\"use_vat\">".$form->textwithpicto($langs->trans("VATIsUsedDes
|
|||||||
print "</td></tr>\n";
|
print "</td></tr>\n";
|
||||||
|
|
||||||
|
|
||||||
print "<tr class=\"oddeven\"><td width=\"140\"><label><input type=\"radio\" name=\"optiontva\" id=\"no_vat\" value=\"0\"".(empty($conf->global->FACTURE_TVAOPTION) ? " checked" : "")."> ".$langs->trans("VATIsNotUsed")."</label></td>";
|
print '<tr class="oddeven"><td width="140"><label><input type="radio" name="optiontva" id="no_vat" value="0"'.(empty($conf->global->FACTURE_TVAOPTION) ? " checked" : "")."> ".$langs->trans("VATIsNotUsed")."</label></td>";
|
||||||
print '<td colspan="2">';
|
print '<td colspan="2">';
|
||||||
$tooltiphelp = '';
|
$tooltiphelp = '';
|
||||||
if ($mysoc->country_code == 'FR') $tooltiphelp = "<i>".$langs->trans("Example").': '.$langs->trans("VATIsNotUsedExampleFR")."</i>\n";
|
if ($mysoc->country_code == 'FR') $tooltiphelp = "<i>".$langs->trans("Example").': '.$langs->trans("VATIsNotUsedExampleFR")."</i>\n";
|
||||||
@ -722,12 +713,12 @@ print "</tr>\n";
|
|||||||
if ($mysoc->useLocalTax(1))
|
if ($mysoc->useLocalTax(1))
|
||||||
{
|
{
|
||||||
// Note: When option is not set, it must not appears as set on on, because there is no default value for this option
|
// Note: When option is not set, it must not appears as set on on, because there is no default value for this option
|
||||||
print "<tr class=\"oddeven\"><td><input type=\"radio\" name=\"optionlocaltax1\" id=\"lt1\" value=\"localtax1on\"".(($conf->global->FACTURE_LOCAL_TAX1_OPTION == '1' || $conf->global->FACTURE_LOCAL_TAX1_OPTION == "localtax1on") ? " checked" : "")."> ".$langs->transcountry("LocalTax1IsUsed", $mysoc->country_code)."</td>";
|
print '<tr class="oddeven"><td><input type="radio" name="optionlocaltax1" id="lt1" value="localtax1on"'.(($conf->global->FACTURE_LOCAL_TAX1_OPTION == '1' || $conf->global->FACTURE_LOCAL_TAX1_OPTION == "localtax1on") ? " checked" : "")."> ".$langs->transcountry("LocalTax1IsUsed", $mysoc->country_code)."</td>";
|
||||||
print '<td colspan="2">';
|
print '<td colspan="2">';
|
||||||
print '<div class="nobordernopadding">';
|
print '<div class="nobordernopadding">';
|
||||||
$tooltiphelp = $langs->transcountry("LocalTax1IsUsedExample", $mysoc->country_code);
|
$tooltiphelp = $langs->transcountry("LocalTax1IsUsedExample", $mysoc->country_code);
|
||||||
$tooltiphelp = ($tooltiphelp != "LocalTax1IsUsedExample" ? "<i>".$langs->trans("Example").': '.$langs->transcountry("LocalTax1IsUsedExample", $mysoc->country_code)."</i>\n" : "");
|
$tooltiphelp = ($tooltiphelp != "LocalTax1IsUsedExample" ? "<i>".$langs->trans("Example").': '.$langs->transcountry("LocalTax1IsUsedExample", $mysoc->country_code)."</i>\n" : "");
|
||||||
print "<label for=\"lt1\">".$form->textwithpicto($langs->transcountry("LocalTax1IsUsedDesc", $mysoc->country_code), $tooltiphelp)."</label>";
|
print '<label for="lt1">'.$form->textwithpicto($langs->transcountry("LocalTax1IsUsedDesc", $mysoc->country_code), $tooltiphelp)."</label>";
|
||||||
if (!isOnlyOneLocalTax(1))
|
if (!isOnlyOneLocalTax(1))
|
||||||
{
|
{
|
||||||
print '<br><label for="lt1">'.$langs->trans("LTRate").'</label>: ';
|
print '<br><label for="lt1">'.$langs->trans("LTRate").'</label>: ';
|
||||||
@ -741,7 +732,7 @@ if ($mysoc->useLocalTax(1))
|
|||||||
print "</div>";
|
print "</div>";
|
||||||
print "</td></tr>\n";
|
print "</td></tr>\n";
|
||||||
|
|
||||||
print "<tr class=\"oddeven\"><td><input type=\"radio\" name=\"optionlocaltax1\" id=\"nolt1\" value=\"localtax1off\"".((empty($conf->global->FACTURE_LOCAL_TAX1_OPTION) || $conf->global->FACTURE_LOCAL_TAX1_OPTION == "localtax1off") ? " checked" : "")."> ".$langs->transcountry("LocalTax1IsNotUsed", $mysoc->country_code)."</td>";
|
print '<tr class="oddeven"><td><input type="radio" name="optionlocaltax1" id="nolt1" value="localtax1off"'.((empty($conf->global->FACTURE_LOCAL_TAX1_OPTION) || $conf->global->FACTURE_LOCAL_TAX1_OPTION == "localtax1off") ? " checked" : "")."> ".$langs->transcountry("LocalTax1IsNotUsed", $mysoc->country_code)."</td>";
|
||||||
print '<td colspan="2">';
|
print '<td colspan="2">';
|
||||||
$tooltiphelp = $langs->transcountry("LocalTax1IsNotUsedExample", $mysoc->country_code);
|
$tooltiphelp = $langs->transcountry("LocalTax1IsNotUsedExample", $mysoc->country_code);
|
||||||
$tooltiphelp = ($tooltiphelp != "LocalTax1IsNotUsedExample" ? "<i>".$langs->trans("Example").': '.$langs->transcountry("LocalTax1IsNotUsedExample", $mysoc->country_code)."</i>\n" : "");
|
$tooltiphelp = ($tooltiphelp != "LocalTax1IsNotUsedExample" ? "<i>".$langs->trans("Example").': '.$langs->transcountry("LocalTax1IsNotUsedExample", $mysoc->country_code)."</i>\n" : "");
|
||||||
@ -750,9 +741,9 @@ if ($mysoc->useLocalTax(1))
|
|||||||
} else {
|
} else {
|
||||||
if (empty($mysoc->country_code))
|
if (empty($mysoc->country_code))
|
||||||
{
|
{
|
||||||
print '<tr class="oddeven nohover"><td class="opacitymedium">'.$countrynotdefined.'</td><td></td><td></td></tr>';
|
print '<tr class="oddeven nohover"><td class="">'.$countrynotdefined.'</td><td></td><td></td></tr>';
|
||||||
} else {
|
} else {
|
||||||
print '<tr class="oddeven nohover"><td class="opacitymedium" colspan="3">'.$langs->trans("NoLocalTaxXForThisCountry", $langs->transnoentitiesnoconv("Setup"), $langs->transnoentitiesnoconv("Dictionaries"), $langs->transnoentitiesnoconv("DictionaryVAT"), $langs->transnoentitiesnoconv("LocalTax1Management")).'</td></tr>';
|
print '<tr class="oddeven nohover"><td class="" colspan="3">'.$langs->trans("NoLocalTaxXForThisCountry", $langs->transnoentitiesnoconv("Setup"), $langs->transnoentitiesnoconv("Dictionaries"), $langs->transnoentitiesnoconv("DictionaryVAT"), $langs->transnoentitiesnoconv("LocalTax1Management")).'</td></tr>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -769,10 +760,10 @@ print "</tr>\n";
|
|||||||
if ($mysoc->useLocalTax(2))
|
if ($mysoc->useLocalTax(2))
|
||||||
{
|
{
|
||||||
// Note: When option is not set, it must not appears as set on on, because there is no default value for this option
|
// Note: When option is not set, it must not appears as set on on, because there is no default value for this option
|
||||||
print "<tr class=\"oddeven\"><td><input type=\"radio\" name=\"optionlocaltax2\" id=\"lt2\" value=\"localtax2on\"".(($conf->global->FACTURE_LOCAL_TAX2_OPTION == '1' || $conf->global->FACTURE_LOCAL_TAX2_OPTION == "localtax2on") ? " checked" : "")."> ".$langs->transcountry("LocalTax2IsUsed", $mysoc->country_code)."</td>";
|
print '<tr class="oddeven"><td><input type="radio" name="optionlocaltax2" id="lt2" value="localtax2on"'.(($conf->global->FACTURE_LOCAL_TAX2_OPTION == '1' || $conf->global->FACTURE_LOCAL_TAX2_OPTION == "localtax2on") ? " checked" : "")."> ".$langs->transcountry("LocalTax2IsUsed", $mysoc->country_code)."</td>";
|
||||||
print '<td colspan="2">';
|
print '<td colspan="2">';
|
||||||
print '<div class="nobordernopadding">';
|
print '<div class="nobordernopadding">';
|
||||||
print "<label for=\"lt2\">".$langs->transcountry("LocalTax2IsUsedDesc", $mysoc->country_code)."</label>";
|
print '<label for="lt2">'.$langs->transcountry("LocalTax2IsUsedDesc", $mysoc->country_code)."</label>";
|
||||||
$tooltiphelp = $langs->transcountry("LocalTax2IsUsedExample", $mysoc->country_code);
|
$tooltiphelp = $langs->transcountry("LocalTax2IsUsedExample", $mysoc->country_code);
|
||||||
$tooltiphelp = ($tooltiphelp != "LocalTax2IsUsedExample" ? "<i>".$langs->trans("Example").': '.$langs->transcountry("LocalTax2IsUsedExample", $mysoc->country_code)."</i>\n" : "");
|
$tooltiphelp = ($tooltiphelp != "LocalTax2IsUsedExample" ? "<i>".$langs->trans("Example").': '.$langs->transcountry("LocalTax2IsUsedExample", $mysoc->country_code)."</i>\n" : "");
|
||||||
if (!isOnlyOneLocalTax(2))
|
if (!isOnlyOneLocalTax(2))
|
||||||
@ -785,7 +776,7 @@ if ($mysoc->useLocalTax(2))
|
|||||||
print "</div>";
|
print "</div>";
|
||||||
print "</td></tr>\n";
|
print "</td></tr>\n";
|
||||||
|
|
||||||
print "<tr class=\"oddeven\"><td><input type=\"radio\" name=\"optionlocaltax2\" id=\"nolt2\" value=\"localtax2off\"".((empty($conf->global->FACTURE_LOCAL_TAX2_OPTION) || $conf->global->FACTURE_LOCAL_TAX2_OPTION == "localtax2off") ? " checked" : "")."> ".$langs->transcountry("LocalTax2IsNotUsed", $mysoc->country_code)."</td>";
|
print '<tr class="oddeven"><td><input type="radio" name="optionlocaltax2" id="nolt2" value="localtax2off"'.((empty($conf->global->FACTURE_LOCAL_TAX2_OPTION) || $conf->global->FACTURE_LOCAL_TAX2_OPTION == "localtax2off") ? " checked" : "")."> ".$langs->transcountry("LocalTax2IsNotUsed", $mysoc->country_code)."</td>";
|
||||||
print '<td colspan="2">';
|
print '<td colspan="2">';
|
||||||
print "<div>";
|
print "<div>";
|
||||||
$tooltiphelp = $langs->transcountry("LocalTax2IsNotUsedExample", $mysoc->country_code);
|
$tooltiphelp = $langs->transcountry("LocalTax2IsNotUsedExample", $mysoc->country_code);
|
||||||
@ -796,9 +787,9 @@ if ($mysoc->useLocalTax(2))
|
|||||||
} else {
|
} else {
|
||||||
if (empty($mysoc->country_code))
|
if (empty($mysoc->country_code))
|
||||||
{
|
{
|
||||||
print '<tr class="oddeven nohover"><td class="opacitymedium">'.$countrynotdefined.'</td><td></td><td></td></tr>';
|
print '<tr class="oddeven nohover"><td class="">'.$countrynotdefined.'</td><td></td><td></td></tr>';
|
||||||
} else {
|
} else {
|
||||||
print '<tr class="oddeven nohover"><td class="opacitymedium" colspan="3">'.$langs->trans("NoLocalTaxXForThisCountry", $langs->transnoentitiesnoconv("Setup"), $langs->transnoentitiesnoconv("Dictionaries"), $langs->transnoentitiesnoconv("DictionaryVAT"), $langs->transnoentitiesnoconv("LocalTax2Management")).'</td></tr>';
|
print '<tr class="oddeven nohover"><td class="" colspan="3">'.$langs->trans("NoLocalTaxXForThisCountry", $langs->transnoentitiesnoconv("Setup"), $langs->transnoentitiesnoconv("Dictionaries"), $langs->transnoentitiesnoconv("DictionaryVAT"), $langs->transnoentitiesnoconv("LocalTax2Management")).'</td></tr>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -824,9 +815,9 @@ if ($mysoc->useRevenueStamp())
|
|||||||
} else {
|
} else {
|
||||||
if (empty($mysoc->country_code))
|
if (empty($mysoc->country_code))
|
||||||
{
|
{
|
||||||
print '<tr class="oddeven nohover"><td class="opacitymedium">'.$countrynotdefined.'</td><td></td><td></td></tr>';
|
print '<tr class="oddeven nohover"><td class="">'.$countrynotdefined.'</td><td></td><td></td></tr>';
|
||||||
} else {
|
} else {
|
||||||
print '<tr class="oddeven nohover"><td class="opacitymedium" colspan="3">'.$langs->trans("NoLocalTaxXForThisCountry", $langs->transnoentitiesnoconv("Setup"), $langs->transnoentitiesnoconv("Dictionaries"), $langs->transnoentitiesnoconv("DictionaryRevenueStamp"), $langs->transnoentitiesnoconv("RevenueStamp")).'</td></tr>';
|
print '<tr class="oddeven nohover"><td class="" colspan="3">'.$langs->trans("NoLocalTaxXForThisCountry", $langs->transnoentitiesnoconv("Setup"), $langs->transnoentitiesnoconv("Dictionaries"), $langs->transnoentitiesnoconv("DictionaryRevenueStamp"), $langs->transnoentitiesnoconv("RevenueStamp")).'</td></tr>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -834,7 +825,7 @@ print "</table>";
|
|||||||
|
|
||||||
|
|
||||||
print '<br><div class="center">';
|
print '<br><div class="center">';
|
||||||
print '<input type="submit" class="button" name="save" value="'.$langs->trans("Save").'">';
|
print '<input type="submit" class="button button-save" name="save" value="'.$langs->trans("Save").'">';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
|
||||||
print '</form>';
|
print '</form>';
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user