10
.github/ISSUE_TEMPLATE/custom.md
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
name: Custom issue template
|
||||||
|
about: Describe this issue template's purpose here.
|
||||||
|
title: ''
|
||||||
|
labels: ''
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
25
.travis.yml
@ -29,12 +29,12 @@ addons:
|
|||||||
- pgloader
|
- pgloader
|
||||||
|
|
||||||
php:
|
php:
|
||||||
- '5.5'
|
|
||||||
- '5.6'
|
- '5.6'
|
||||||
- '7.0'
|
- '7.0'
|
||||||
- '7.1'
|
- '7.1'
|
||||||
- '7.2'
|
- '7.2'
|
||||||
- '7.3'
|
- '7.3'
|
||||||
|
- '7.4'
|
||||||
- nightly
|
- nightly
|
||||||
|
|
||||||
env:
|
env:
|
||||||
@ -59,22 +59,22 @@ matrix:
|
|||||||
- php: nightly
|
- php: nightly
|
||||||
# We exclude some combinations not usefull to save Travis CPU
|
# We exclude some combinations not usefull to save Travis CPU
|
||||||
exclude:
|
exclude:
|
||||||
- php: '5.6'
|
|
||||||
env: DB=mariadb
|
|
||||||
- php: '7.0'
|
- php: '7.0'
|
||||||
env: DB=mariadb
|
env: DB=mariadb
|
||||||
- php: '7.1'
|
- php: '7.1'
|
||||||
env: DB=mariadb
|
env: DB=mariadb
|
||||||
- php: '7.2'
|
- php: '7.2'
|
||||||
env: DB=mariadb
|
env: DB=mariadb
|
||||||
- php: '5.6'
|
- php: '7.3'
|
||||||
env: DB=postgresql
|
env: DB=mariadb
|
||||||
- php: '7.0'
|
- php: '7.0'
|
||||||
env: DB=postgresql
|
env: DB=postgresql
|
||||||
- php: '7.1'
|
- php: '7.1'
|
||||||
env: DB=postgresql
|
env: DB=postgresql
|
||||||
- php: '7.2'
|
- php: '7.2'
|
||||||
env: DB=postgresql
|
env: DB=postgresql
|
||||||
|
- php: '7.3'
|
||||||
|
env: DB=postgresql
|
||||||
- php: nightly
|
- php: nightly
|
||||||
env: DB=postgresql
|
env: DB=postgresql
|
||||||
|
|
||||||
@ -125,7 +125,7 @@ install:
|
|||||||
squizlabs/php_codesniffer ^3
|
squizlabs/php_codesniffer ^3
|
||||||
fi
|
fi
|
||||||
if [ "$TRAVIS_PHP_VERSION" = '5.6' ] || [ "$TRAVIS_PHP_VERSION" = '7.0' ] || [ "$TRAVIS_PHP_VERSION" = '7.1' ] \
|
if [ "$TRAVIS_PHP_VERSION" = '5.6' ] || [ "$TRAVIS_PHP_VERSION" = '7.0' ] || [ "$TRAVIS_PHP_VERSION" = '7.1' ] \
|
||||||
[ "$TRAVIS_PHP_VERSION" = '7.2' ] || [ "$TRAVIS_PHP_VERSION" = '7.3' ]; then
|
[ "$TRAVIS_PHP_VERSION" = '7.2' ] || [ "$TRAVIS_PHP_VERSION" = '7.3' ] || [ "$TRAVIS_PHP_VERSION" = '7.4' ]; then
|
||||||
composer -n require phpunit/phpunit ^5 \
|
composer -n require phpunit/phpunit ^5 \
|
||||||
jakub-onderka/php-parallel-lint ^0 \
|
jakub-onderka/php-parallel-lint ^0 \
|
||||||
jakub-onderka/php-console-highlighter ^0 \
|
jakub-onderka/php-console-highlighter ^0 \
|
||||||
@ -248,7 +248,7 @@ before_script:
|
|||||||
# enable php-fpm
|
# enable php-fpm
|
||||||
- sudo cp ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.conf.default ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.conf
|
- sudo cp ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.conf.default ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.conf
|
||||||
- |
|
- |
|
||||||
if [ "$TRAVIS_PHP_VERSION" = '7.0' ] || [ "$TRAVIS_PHP_VERSION" = '7.1' ] || [ "$TRAVIS_PHP_VERSION" = '7.2' ] || [ "$TRAVIS_PHP_VERSION" = '7.3' ] || [ "$TRAVIS_PHP_VERSION" = 'nightly' ]; then
|
if [ "$TRAVIS_PHP_VERSION" = '7.0' ] || [ "$TRAVIS_PHP_VERSION" = '7.1' ] || [ "$TRAVIS_PHP_VERSION" = '7.2' ] || [ "$TRAVIS_PHP_VERSION" = '7.3' ] || [ "$TRAVIS_PHP_VERSION" = '7.4' ] || [ "$TRAVIS_PHP_VERSION" = 'nightly' ]; then
|
||||||
# Copy the included pool
|
# Copy the included pool
|
||||||
sudo cp ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.d/www.conf.default ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.d/www.conf
|
sudo cp ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.d/www.conf.default ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.d/www.conf
|
||||||
fi
|
fi
|
||||||
@ -285,7 +285,7 @@ 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/sabre --exclude htdocs/includes/phpoffice/phpexcel/Classes/PHPExcel/Shared --exclude htdocs/includes/phpoffice/PhpSpreadsheet --exclude htdocs/includes/sebastian --exclude htdocs/includes/squizlabs/php_codesniffer/tests --exclude htdocs/includes/jakub-onderka/php-parallel-lint/tests --exclude htdocs/includes/mike42/escpos-php/example --exclude htdocs/includes/phpunit/php-token-stream/tests --exclude htdocs/includes/composer/autoload_static.php --blame .
|
parallel-lint --exclude dev/namespacemig --exclude htdocs/includes/sabre --exclude htdocs/includes/phpoffice/phpexcel/Classes/PHPExcel/Shared --exclude htdocs/includes/phpoffice/PhpSpreadsheet --exclude htdocs/includes/sebastian --exclude htdocs/includes/squizlabs/php_codesniffer --exclude htdocs/includes/jakub-onderka --exclude htdocs/includes/mike42/escpos-php/example --exclude htdocs/includes/phpunit/ --exclude htdocs/includes/composer/autoload_static.php --blame .
|
||||||
set +e
|
set +e
|
||||||
echo
|
echo
|
||||||
|
|
||||||
@ -401,9 +401,12 @@ script:
|
|||||||
php upgrade.php 9.0.0 10.0.0 ignoredbversion > $TRAVIS_BUILD_DIR/upgrade9001000.log
|
php upgrade.php 9.0.0 10.0.0 ignoredbversion > $TRAVIS_BUILD_DIR/upgrade9001000.log
|
||||||
php upgrade2.php 9.0.0 10.0.0 > $TRAVIS_BUILD_DIR/upgrade9001000-2.log
|
php upgrade2.php 9.0.0 10.0.0 > $TRAVIS_BUILD_DIR/upgrade9001000-2.log
|
||||||
php step5.php 9.0.0 10.0.0 > $TRAVIS_BUILD_DIR/upgrade9001000-3.log
|
php step5.php 9.0.0 10.0.0 > $TRAVIS_BUILD_DIR/upgrade9001000-3.log
|
||||||
php upgrade.php 10.0.0 11.0.0 ignoredbversion > $TRAVIS_BUILD_DIR/upgrade9001000.log
|
php upgrade.php 10.0.0 11.0.0 ignoredbversion > $TRAVIS_BUILD_DIR/upgrade10001100.log
|
||||||
php upgrade2.php 10.0.0 11.0.0 > $TRAVIS_BUILD_DIR/upgrade9001000-2.log
|
php upgrade2.php 10.0.0 11.0.0 > $TRAVIS_BUILD_DIR/upgrade10001100-2.log
|
||||||
php step5.php 10.0.0 11.0.0 > $TRAVIS_BUILD_DIR/upgrade9001000-3.log
|
php step5.php 10.0.0 11.0.0 > $TRAVIS_BUILD_DIR/upgrade10001100-3.log
|
||||||
|
php upgrade.php 11.0.0 12.0.0 ignoredbversion > $TRAVIS_BUILD_DIR/upgrade11001200.log
|
||||||
|
php upgrade2.php 11.0.0 12.0.0 > $TRAVIS_BUILD_DIR/upgrade11001200-2.log
|
||||||
|
php step5.php 11.0.0 12.0.0 > $TRAVIS_BUILD_DIR/upgrade11001200-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_TICKETSUP,MAIN_MODULE_ACCOUNTING > $TRAVIS_BUILD_DIR/enablemodule.log
|
php upgrade2.php 0.0.0 0.0.0 MAIN_MODULE_API,MAIN_MODULE_SUPPLIERPROPOSAL,MAIN_MODULE_WEBSITE,MAIN_MODULE_TICKETSUP,MAIN_MODULE_ACCOUNTING > $TRAVIS_BUILD_DIR/enablemodule.log
|
||||||
echo $?
|
echo $?
|
||||||
|
|||||||
118
ChangeLog
@ -3,16 +3,36 @@ English Dolibarr ChangeLog
|
|||||||
--------------------------------------------------------------
|
--------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
***** ChangeLog for 12.0.0 compared to 11.0.0 *****
|
||||||
|
For Users:
|
||||||
|
|
||||||
|
|
||||||
|
For Developers or integrators:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
WARNING:
|
||||||
|
|
||||||
|
Following changes may create regressions for some external modules, but were necessary to make Dolibarr better:
|
||||||
|
* PHP 5.5 is no more supported. Minimum PHP is now 5.6+.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
***** ChangeLog for 11.0.0 compared to 10.0.0 *****
|
***** ChangeLog for 11.0.0 compared to 10.0.0 *****
|
||||||
For Users:
|
For Users:
|
||||||
|
|
||||||
NEW: Module BOM is now stable (Module MO - Manufacturing Order is still in development).
|
NEW: Module BOM is now stable.
|
||||||
NEW: A nicer dashboard for opened elements on Home page.
|
NEW: Module MO (Manufacturing Order) is available with experimental status.
|
||||||
|
NEW: Can set the Address/Contact by default on third parties.
|
||||||
|
NEW: Add a dictionary to edit list of Social networks.
|
||||||
|
NEW: A nicer dashboard for open elements on Home page.
|
||||||
NEW: Add task widget and add task progress bar
|
NEW: Add task widget and add task progress bar
|
||||||
|
NEW: Support of deployment of metapackages
|
||||||
|
NEW: Menu "Export accounting document" to generate a zip with all documents requested by a bookkeeper is now stable.
|
||||||
|
NEW: Add button "Save and Stay" in website editor of pages.
|
||||||
NEW: Accountancy - Can add specific widget in this accountancy area.
|
NEW: Accountancy - Can add specific widget in this accountancy area.
|
||||||
NEW: Accountancy - Add export model LDCompta V9 & higher
|
NEW: Accountancy - Add export model LDCompta V9 & higher
|
||||||
NEW: Accountancy - Add permission on export, delete operations in ledger
|
NEW: Accountancy - Add permission on export, delete operations in ledger
|
||||||
NEW: Add 2 hidden options to set the default sorting (sort and order) on document page.
|
|
||||||
NEW: add ability to edit price without tax before adding a line of a predefined product.
|
NEW: add ability to edit price without tax before adding a line of a predefined product.
|
||||||
NEW: Add a tab to setup "Opening hours" of company (information only).
|
NEW: Add a tab to setup "Opening hours" of company (information only).
|
||||||
NEW: Add attendee to ical export + cleanup.
|
NEW: Add attendee to ical export + cleanup.
|
||||||
@ -26,15 +46,9 @@ NEW: Add constant MAIN_DISABLE_GLOBAL_WORKBOARD to disable workboard in home pag
|
|||||||
NEW: add country code in import product model
|
NEW: add country code in import product model
|
||||||
NEW: Add 'Direct Cash Payment' button in TakePOS
|
NEW: Add 'Direct Cash Payment' button in TakePOS
|
||||||
NEW: Add odt support to supplier orders
|
NEW: Add odt support to supplier orders
|
||||||
NEW: Add experimental SumUp payment to TakePOS (need to set a hidden constant)
|
|
||||||
NEW: Add feature to search a string into website containers
|
NEW: Add feature to search a string into website containers
|
||||||
NEW: Add GET and POST /supplierinvoices/payments REST API endpoints.
|
NEW: Add GET and POST /supplierinvoices/payments REST API endpoints.
|
||||||
NEW: Show progress bar for declared progression of tasks.
|
NEW: Show progress bar for declared progression of tasks.
|
||||||
NEW: Add hidden option to update supplier buying price during receptions.
|
|
||||||
NEW: Add hidden option PROPOSAL_SHOW_INVOICED_AMOUNT (not reliable if one invoice is done on several order or several proposal)
|
|
||||||
NEW: Add hidden option SUPPLIER_ORDER_CAN_UPDATE_BUYINGPRICE_DURING_RECEIPT for add possibility to update supplier buying price in the reception on a supplier order
|
|
||||||
NEW: Add hidden option THIRDPARTY_PROPAGATE_EXTRAFIELDS_TO_ORDER to copy extrafields from third party to order.
|
|
||||||
NEW: Add hidden options to send by email even for object with draft status.
|
|
||||||
NEW: Add last change date in page "Other setup". Can sort page on name/date.
|
NEW: Add last change date in page "Other setup". Can sort page on name/date.
|
||||||
NEW: Add link to export targets of an emailings into a CSV file.
|
NEW: Add link to export targets of an emailings into a CSV file.
|
||||||
NEW: Add link to the public interface on the ticket card.
|
NEW: Add link to the public interface on the ticket card.
|
||||||
@ -43,28 +57,25 @@ NEW: add MAIN_LANGUAGES_ALLOWED constant to limit languages displayed.
|
|||||||
NEW: add MAIN_SHOW_COMPANY_NAME_IN_BANNER_ADDRESS constant.
|
NEW: add MAIN_SHOW_COMPANY_NAME_IN_BANNER_ADDRESS constant.
|
||||||
NEW: add mass actions in shipment list.
|
NEW: add mass actions in shipment list.
|
||||||
NEW: add minimum stock filter in load warehoues for product form.
|
NEW: add minimum stock filter in load warehoues for product form.
|
||||||
NEW: add name_alias in fields to search all
|
NEW: add name_alias in fields used for quick search.
|
||||||
NEW: add new rule fetchidfromcodeandlabel for categories import
|
NEW: add new rule fetchidfromcodeandlabel for categories import.
|
||||||
NEW: add office phone for salespresentatives
|
NEW: add office phone for salespresentatives
|
||||||
NEW: add office phone & job on user tooltips
|
NEW: add office phone & job on user tooltips
|
||||||
NEW: Add option MAIN_PDF_FORCE_FONT_SIZE
|
NEW: Add option MAIN_PDF_FORCE_FONT_SIZE
|
||||||
NEW: Add option MEMBER_CAN_CONVERT_CUSTOMERS_TO_MEMBERS
|
NEW: Add option MEMBER_CAN_CONVERT_CUSTOMERS_TO_MEMBERS
|
||||||
NEW: Add option multiselect for developers on the selector of language.
|
|
||||||
NEW: Add option WORKFLOW_CAN_CREATE_PURCHASE_ORDER_FROM_PROPOSAL
|
NEW: Add option WORKFLOW_CAN_CREATE_PURCHASE_ORDER_FROM_PROPOSAL
|
||||||
NEW: Add pagination on list of object of a category
|
NEW: Add pagination on list of object of a category
|
||||||
NEW: add parent category id or label in import category module
|
NEW: add parent category id or label in import category module
|
||||||
NEW: add parent id or ref column in warehouse import
|
NEW: add parent id or ref column in warehouse import
|
||||||
NEW: Can set the Address/Contact by default on third parties.
|
|
||||||
NEW: Add search into template
|
NEW: Add search into template
|
||||||
NEW: Add shipment widget
|
NEW: Add shipment widget
|
||||||
NEW: add socialnetworks dictionary
|
|
||||||
NEW: Add statistics on product into contracts
|
NEW: Add statistics on product into contracts
|
||||||
NEW: Add status of warehouse in tooltip of a warehouse.
|
NEW: Add status of warehouse in the tooltip of a warehouse.
|
||||||
NEW: add supplier's product list
|
NEW: add supplier's product list
|
||||||
NEW: add units fields in buying price tab of product card
|
NEW: add units fields in buying price tab of product card
|
||||||
NEW: Add units in select products lines
|
NEW: Add units in select products lines
|
||||||
NEW: Add upload document on account statement
|
NEW: Add upload document on account statement
|
||||||
NEW: Add widgets for BOMs and MOs
|
NEW: Add widgets for BOMs and MOs.
|
||||||
NEW: Amount invoiced column in proposal list
|
NEW: Amount invoiced column in proposal list
|
||||||
NEW: Ask the new label and new dates in confirm popup when cloning tax
|
NEW: Ask the new label and new dates in confirm popup when cloning tax
|
||||||
NEW: auto set closing date and user on invoice
|
NEW: auto set closing date and user on invoice
|
||||||
@ -72,12 +83,11 @@ NEW: Avoid wrap between picto and text on getNomUrl
|
|||||||
NEW: Balance Stripe connect account for supplier
|
NEW: Balance Stripe connect account for supplier
|
||||||
NEW: Bank Add an option for colorize background color of debit or credit movement
|
NEW: Bank Add an option for colorize background color of debit or credit movement
|
||||||
NEW: Beautify the select box of warehouses
|
NEW: Beautify the select box of warehouses
|
||||||
NEW: birthday widget for member
|
NEW: Add birthday widget for members
|
||||||
NEW: Widgets uses fiscal year
|
NEW: Widgets uses fiscal year.
|
||||||
NEW: Can change supplier when cloning a Purchase Order
|
NEW: Can change supplier when cloning a Purchase Order.
|
||||||
NEW: can choose lines while creating order from origin
|
NEW: can choose lines to keep while creating order from origin
|
||||||
NEW: Can crop/resize image attached on a bank record
|
NEW: Can crop/resize image attached on a bank record
|
||||||
NEW: Can defined a position of numbering submodules for thirdparties
|
|
||||||
NEW: Can edit date or RUM mandate.
|
NEW: Can edit date or RUM mandate.
|
||||||
NEW: Can edit link to the translation page in website module
|
NEW: Can edit link to the translation page in website module
|
||||||
NEW: Can edit the price of predefined product during adding in documents
|
NEW: Can edit the price of predefined product during adding in documents
|
||||||
@ -88,15 +98,13 @@ NEW: Can load multilang translation in same step than fetch_lines
|
|||||||
NEW: Can restrict access using DAV module to some host IPs only
|
NEW: Can restrict access using DAV module to some host IPs only
|
||||||
NEW: Can restrict API usage to some IP only
|
NEW: Can restrict API usage to some IP only
|
||||||
NEW: Can select website templates from available default templates with a preview.
|
NEW: Can select website templates from available default templates with a preview.
|
||||||
NEW: Can set a filter on object linked in modulebuilder.
|
|
||||||
NEW: Can set a squarred icon on your company setup
|
NEW: Can set a squarred icon on your company setup
|
||||||
NEW: can specify hour start end for selectDate and step for minutes
|
NEW: can specify hour start end for selectDate and step for minutes
|
||||||
NEW: Categories/Tags are also available on warehouses
|
NEW: Categories/Tags are also available on warehouses
|
||||||
NEW: Check if a resource is in use in an event
|
NEW: Check if a resource is in use in an event
|
||||||
NEW: Code for extrafields uses the new array $extrafields->attributes
|
|
||||||
NEW: Compute column value from others columns in import module
|
NEW: Compute column value from others columns in import module
|
||||||
NEW: Copy linked categories on product clone process.
|
NEW: Copy linked categories on product clone process.
|
||||||
NEW: Default for Stripe is STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION
|
NEW: Default mode for Stripe is STRIPE_USE_INTENT_WITH_AUTOMATIC_CONFIRMATION
|
||||||
NEW: Digitaria model for numbering accountancy thirdparty
|
NEW: Digitaria model for numbering accountancy thirdparty
|
||||||
NEW: Display membership in takepos if member linked to the thirdparty
|
NEW: Display membership in takepos if member linked to the thirdparty
|
||||||
NEW: Display supplier in objectline if defined
|
NEW: Display supplier in objectline if defined
|
||||||
@ -104,9 +112,10 @@ NEW: Add default duration of subscriptions on members type
|
|||||||
NEW: Email template for Takepos (to send invoice)
|
NEW: Email template for Takepos (to send invoice)
|
||||||
NEW: Expense request and holiday validator fields
|
NEW: Expense request and holiday validator fields
|
||||||
NEW: Export ledger table in Charlemagne format
|
NEW: Export ledger table in Charlemagne format
|
||||||
NEW: Export livre Charlemagne
|
|
||||||
NEW: Extend option ORDER_ADD_ORDERS_WITH_PARENT_PROD_IF_INCDEC for all virtual product stats (renamed into PRODUCT_STATS_WITH_PARENT_PROD_IF_INCDEC)
|
NEW: Extend option ORDER_ADD_ORDERS_WITH_PARENT_PROD_IF_INCDEC for all virtual product stats (renamed into PRODUCT_STATS_WITH_PARENT_PROD_IF_INCDEC)
|
||||||
|
NEW: Value "None" to unbind an invoice line and its accounting account is more visible
|
||||||
NEW: FCKeditor setup for tickets
|
NEW: FCKeditor setup for tickets
|
||||||
|
NEW: The default theme of TakePOS work better on smartphones.
|
||||||
NEW: GeoIP v2 support is natively provided -> So IPv6 is supported
|
NEW: GeoIP v2 support is natively provided -> So IPv6 is supported
|
||||||
NEW: List by closing date on order list and proposal list
|
NEW: List by closing date on order list and proposal list
|
||||||
NEW: Look and feel v11: Some setup pages are by default direclty in edit mode.
|
NEW: Look and feel v11: Some setup pages are by default direclty in edit mode.
|
||||||
@ -144,7 +153,13 @@ NEW: #4301
|
|||||||
|
|
||||||
For Developers or integrators:
|
For Developers or integrators:
|
||||||
|
|
||||||
|
NEW: Compatible with PHP 7.4
|
||||||
|
NEW: Code for extrafields uses the new array $extrafields->attributes
|
||||||
|
NEW: Can set a filter on object linked in modulebuilder.
|
||||||
|
NEW: Can defined a position of numbering submodules for thirdparties
|
||||||
|
NEW: Add option multiselect for developers on the selector of language.
|
||||||
NEW: Add a manifest.json.php file for web app.
|
NEW: Add a manifest.json.php file for web app.
|
||||||
|
NEW: Support of deployement of metapackages
|
||||||
NEW: Removed deprecated code that create linked object from ->origin
|
NEW: Removed deprecated code that create linked object from ->origin
|
||||||
NEW: experimental zapier for dolibarr
|
NEW: experimental zapier for dolibarr
|
||||||
NEW: Accountancy - Add hook bookkeepinglist on general ledger
|
NEW: Accountancy - Add hook bookkeepinglist on general ledger
|
||||||
@ -182,6 +197,12 @@ NEW: Use a dedicated css for the pencil to edit a field.
|
|||||||
NEW: multilangs in fetch_lines
|
NEW: multilangs in fetch_lines
|
||||||
NEW: Add more complete info for triggers actioncom
|
NEW: Add more complete info for triggers actioncom
|
||||||
NEW: add multicurrency rate at currency list API
|
NEW: add multicurrency rate at currency list API
|
||||||
|
NEW: Add 2 hidden options to set the default sorting (sort and order) on document page.
|
||||||
|
NEW: Add hidden option to update supplier buying price during receptions.
|
||||||
|
NEW: Add hidden option PROPOSAL_SHOW_INVOICED_AMOUNT (not reliable if one invoice is done on several order or several proposal)
|
||||||
|
NEW: Add hidden option SUPPLIER_ORDER_CAN_UPDATE_BUYINGPRICE_DURING_RECEIPT for add possibility to update supplier buying price in the reception on a supplier order
|
||||||
|
NEW: Add hidden option THIRDPARTY_PROPAGATE_EXTRAFIELDS_TO_ORDER to copy extrafields from third party to order.
|
||||||
|
NEW: Add hidden options to send by email even for object with draft status.
|
||||||
NEW: Update jquery library to 3.4.1
|
NEW: Update jquery library to 3.4.1
|
||||||
NEW: Upgrade ACE editor to v1.4.6
|
NEW: Upgrade ACE editor to v1.4.6
|
||||||
|
|
||||||
@ -207,6 +228,53 @@ Following changes may create regressions for some external modules, but were nec
|
|||||||
* The jquery plugin/dependency multiselect has been removed. It was not used by Dolibarr core.
|
* The jquery plugin/dependency multiselect has been removed. It was not used by Dolibarr core.
|
||||||
|
|
||||||
|
|
||||||
|
***** ChangeLog for 10.0.6 compared to 10.0.5 *****
|
||||||
|
FIX Regression of 10.0.5 to create/edit proposals and orders.
|
||||||
|
FIX: #12760 #12763 #12755 #12765 #12751
|
||||||
|
FIX: add product qty in shipment already sent (fix for option STOCK_CALCULATE_ON_SHIPMENT_NEW)
|
||||||
|
FIX: an issue that shows all entities stock
|
||||||
|
FIX: class Facture undefined in displaying margin information
|
||||||
|
FIX: error 500 when getting margin info for objects other than invoices
|
||||||
|
FIX: Loan card - Wrong language key used
|
||||||
|
FIX: Missing language key for MAIN_MAXTABS_IN_CARD
|
||||||
|
FIX: product with empty stock were not visible
|
||||||
|
FIX: remove backward compatibility projectid and uses object id instead
|
||||||
|
FIX: Some issues on salary payment
|
||||||
|
FIX: Some problems on conciliation with others modules
|
||||||
|
FIX: typo on language key
|
||||||
|
FIX: url new for task time spent in project element tab
|
||||||
|
FIX: uses GETPOSTISSET instead of GETPOST for projectfield
|
||||||
|
FIX: var transkey not defined in input hidden
|
||||||
|
FIX: wrong var name and avoid warning
|
||||||
|
|
||||||
|
***** ChangeLog for 10.0.5 compared to 10.0.4 *****
|
||||||
|
FIX: 10.0: add URL param "restore_last_search_values=1" to all backlinks pointing to lists
|
||||||
|
FIX: 10.0: do not display single-letter values (indicating duration unit without value) in product list
|
||||||
|
FIX: #12473
|
||||||
|
FIX: #12481 : fix ticket creation from thirdparty, mission $socid var
|
||||||
|
FIX: #12482
|
||||||
|
FIX: #12644
|
||||||
|
FIX: #12665 Mass invoice validation with stock management
|
||||||
|
FIX: #12688
|
||||||
|
FIX: #12745
|
||||||
|
FIX: add and modify category translate form with posted values on errors
|
||||||
|
FIX: add URL param "restore_last_search_values=1" to all backlinks that point to a list
|
||||||
|
FIX: CommandeFournisseurLigne update function must not be able to return other value than 1 if success
|
||||||
|
FIX: contact card state address selected after filling address
|
||||||
|
FIX: dol_string_nohtmltag when there is html with windows EOL "<br>\r\n"
|
||||||
|
FIX: filter language is an array
|
||||||
|
FIX: first col at wrong position in Export 2007 (new)
|
||||||
|
FIX: getrights() request
|
||||||
|
FIX: Invoice Situation integration into Margin
|
||||||
|
FIX: missing nl2br conversion
|
||||||
|
FIX: not fee in payout list
|
||||||
|
FIX: product_fourn_price_id was assigned too late for logPrice() function
|
||||||
|
FIX: Reduce number of request for list of products
|
||||||
|
FIX: set due date in object in create invoice
|
||||||
|
FIX: units traductions for selectUnits() function
|
||||||
|
FIX: when we need to bill several orders, order lines unit is not on bill lines
|
||||||
|
NEW: 9.0: allow users to use the mysqldump '--quick' option
|
||||||
|
|
||||||
***** ChangeLog for 10.0.4 compared to 10.0.3 *****
|
***** ChangeLog for 10.0.4 compared to 10.0.3 *****
|
||||||
FIX: The pdf templates were using the large logo making PDF too large (and edition of proposal, order, invoice VERY slow)
|
FIX: The pdf templates were using the large logo making PDF too large (and edition of proposal, order, invoice VERY slow)
|
||||||
FIX: #12258
|
FIX: #12258
|
||||||
|
|||||||
58
README-FR.md
@ -1,18 +1,17 @@
|
|||||||
# DOLIBARR ERP & CRM
|
# DOLIBARR ERP & CRM
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
Dolibarr ERP & CRM est un logiciel moderne pour gérer votre activité (société, association, auto-entrepreneurs, artisans).
|
Dolibarr ERP & CRM est un logiciel moderne pour gérer votre activité (société, association, auto-entrepreneurs, artisans).
|
||||||
Il est simple d'utilisation et modulaire, vous permettant de n'activez que les fonctions dont vous avez besoin (contacts, fournisseurs, factures, commandes, stocks, agenda, ...).
|
Il est simple d'utilisation et modulaire, vous permettant de n'activez que les fonctions dont vous avez besoin (contacts, fournisseurs, factures, commandes, stocks, agenda, ...).
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## LICENCE
|
## LICENCE
|
||||||
|
|
||||||
Dolibarr est distribué sous les termes de la licence GNU General Public License v3+ ou supérieure.
|
Dolibarr est distribué sous les termes de la licence GNU General Public License v3+ ou supérieure.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## INSTALLER DOLIBARR
|
## INSTALLER DOLIBARR
|
||||||
|
|
||||||
### Configuration simple
|
### Configuration simple
|
||||||
@ -31,32 +30,32 @@ Vous pouvez aussi utiliser un serveur Web et une base de données prise en charg
|
|||||||
|
|
||||||
- Décompressez l'archive .zip téléchargée pour copier le répertoire "dolibarr/htdocs" et tous ses fichiers à la racine du serveur Web ou récupérez-les directement à partir de GitHub (recommandé si vous connaissez git):
|
- Décompressez l'archive .zip téléchargée pour copier le répertoire "dolibarr/htdocs" et tous ses fichiers à la racine du serveur Web ou récupérez-les directement à partir de GitHub (recommandé si vous connaissez git):
|
||||||
|
|
||||||
git clone https://github.com/dolibarr/dolibarr -b x.y (où x.y est la version principale comme 3.6, 9.0, ...)
|
`git clone https://github.com/dolibarr/dolibarr -b x.y` (où x.y est la version principale comme 3.6, 9.0, ...)
|
||||||
|
|
||||||
- Configurez votre serveur Web pour qu'il utilise "*dolibarr/htdocs*" en tant que racine si votre serveur Web ne possède pas déjà de répertoire défini vers lequel pointer.
|
- Configurez votre serveur Web pour qu'il utilise "*dolibarr/htdocs*" en tant que racine si votre serveur Web ne possède pas déjà de répertoire défini vers lequel pointer.
|
||||||
|
|
||||||
- Créez un fichier `htdocs/conf/conf.php` vide et définissez les autorisations d'*écrire* pour l'utilisateur de votre serveur Web (l'autorisation *écrire* sera supprimée une fois l'installation terminée)
|
- Créez un fichier `htdocs/conf/conf.php` vide et définissez les autorisations d'*écrire* pour l'utilisateur de votre serveur Web (l'autorisation *écrire* sera supprimée une fois l'installation terminée)
|
||||||
|
|
||||||
- Depuis votre navigateur, allez à la page "install/" de dolibarr
|
- Depuis votre navigateur, allez à la page "install/" de dolibarr
|
||||||
|
|
||||||
L’URL dépendra de la façon dont votre configuration Web a été configurée pour pointer vers votre installation de dolibarr. Cela peut ressembler à:
|
L’URL dépendra de la façon dont votre configuration Web a été configurée pour pointer vers votre installation de dolibarr. Cela peut ressembler à:
|
||||||
|
|
||||||
|
`http://localhost/dolibarr/htdocs/install/`
|
||||||
|
|
||||||
|
ou
|
||||||
|
|
||||||
|
`http://localhost/dolibarr/install/`
|
||||||
|
|
||||||
|
ou
|
||||||
|
|
||||||
|
`http://yourdolibarrvirtualhost/install/`
|
||||||
|
|
||||||
http://localhost/dolibarr/htdocs/install/
|
|
||||||
|
|
||||||
ou
|
|
||||||
|
|
||||||
http://localhost/dolibarr/install/
|
|
||||||
|
|
||||||
ou
|
|
||||||
|
|
||||||
http://yourdolibarrvirtualhost/install/
|
|
||||||
|
|
||||||
- Suivez les instructions de l'installateur
|
- Suivez les instructions de l'installateur
|
||||||
|
|
||||||
|
|
||||||
## METTRE A JOUR DOLIBARR
|
## METTRE A JOUR DOLIBARR
|
||||||
|
|
||||||
Pour mettre à jour Dolibarr depuis une vieille version vers celle ci:
|
Pour mettre à jour Dolibarr depuis une vieille version vers celle ci:
|
||||||
|
|
||||||
- Ecrasez les vieux fichiers dans le vieux répertoire 'dolibarr' par les fichiers
|
- Ecrasez les vieux fichiers dans le vieux répertoire 'dolibarr' par les fichiers
|
||||||
fournis dans ce nouveau package.
|
fournis dans ce nouveau package.
|
||||||
|
|
||||||
@ -65,16 +64,13 @@ Pour mettre à jour Dolibarr depuis une vieille version vers celle ci:
|
|||||||
|
|
||||||
*Note: Le processus de migration peut être lancé manuellement et plusieurs fois, sans risque, en appelant la page /install/*
|
*Note: Le processus de migration peut être lancé manuellement et plusieurs fois, sans risque, en appelant la page /install/*
|
||||||
|
|
||||||
|
|
||||||
## CE QUI EST NOUVEAU
|
## CE QUI EST NOUVEAU
|
||||||
|
|
||||||
Voir fichier ChangeLog.
|
Voir fichier ChangeLog.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## CE QUE DOLIBARR PEUT FAIRE
|
## CE QUE DOLIBARR PEUT FAIRE
|
||||||
|
|
||||||
### Modules principaux (tous optionnels):
|
### Modules principaux (tous optionnels)
|
||||||
|
|
||||||
- Annuaires des prospects et/ou client et/ou fournisseurs
|
- Annuaires des prospects et/ou client et/ou fournisseurs
|
||||||
- Gestion de catalogue de produits et services
|
- Gestion de catalogue de produits et services
|
||||||
@ -96,7 +92,7 @@ Voir fichier ChangeLog.
|
|||||||
- Point de vente/Caisse enregistreuse
|
- Point de vente/Caisse enregistreuse
|
||||||
- …
|
- …
|
||||||
|
|
||||||
### Autres modules:
|
### Autres modules
|
||||||
|
|
||||||
- Gestion de marque-pages
|
- Gestion de marque-pages
|
||||||
- Gestion des promesses de dons
|
- Gestion des promesses de dons
|
||||||
@ -111,7 +107,7 @@ Voir fichier ChangeLog.
|
|||||||
- Intégration de système de paiements (Paypal, Stripe, Paybox...)
|
- Intégration de système de paiements (Paypal, Stripe, Paybox...)
|
||||||
- …
|
- …
|
||||||
|
|
||||||
### Divers:
|
### Divers
|
||||||
|
|
||||||
- Multi-langue.
|
- Multi-langue.
|
||||||
- Multi-utilisateurs avec différents niveaux de permissions par module.
|
- Multi-utilisateurs avec différents niveaux de permissions par module.
|
||||||
@ -139,46 +135,40 @@ Voir fichier ChangeLog.
|
|||||||
|
|
||||||
Dolibarr peut aussi être étendu à volonté avec l'ajout de module/applications externes développées par des développeus tiers, disponible sur [DoliStore](https://www.dolistore.com).
|
Dolibarr peut aussi être étendu à volonté avec l'ajout de module/applications externes développées par des développeus tiers, disponible sur [DoliStore](https://www.dolistore.com).
|
||||||
|
|
||||||
|
|
||||||
## CE QUE DOLIBARR NE PEUT PAS (ENCORE) FAIRE
|
## CE QUE DOLIBARR NE PEUT PAS (ENCORE) FAIRE
|
||||||
|
|
||||||
Voici un liste de fonctionnalités pas encore gérées par Dolibarr:
|
Voici un liste de fonctionnalités pas encore gérées par Dolibarr:
|
||||||
|
|
||||||
- Dolibarr ne contient pas de module de Gestion de la paie.
|
- Dolibarr ne contient pas de module de Gestion de la paie.
|
||||||
- Les tâches du module de gestion de projets n'ont pas de dépendances entre elle.
|
- Les tâches du module de gestion de projets n'ont pas de dépendances entre elle.
|
||||||
- Dolibarr n'embarque pas de Webmail intégré nativement.
|
- Dolibarr n'embarque pas de Webmail intégré nativement.
|
||||||
- Dolibarr ne fait pas le café (pas encore).
|
- Dolibarr ne fait pas le café (pas encore).
|
||||||
|
|
||||||
|
|
||||||
## DOCUMENTATION
|
## DOCUMENTATION
|
||||||
|
|
||||||
La documentation utilisateur, développeur et traducteur est disponible sous forme de ressources de la communauté via le site [Wiki](https://wiki.dolibarr.org).
|
La documentation utilisateur, développeur et traducteur est disponible sous forme de ressources de la communauté via le site [Wiki](https://wiki.dolibarr.org).
|
||||||
|
|
||||||
|
|
||||||
## CONTRIBUER
|
## CONTRIBUER
|
||||||
|
|
||||||
Ce projet existe grâce à ses nombreux contributeurs [[Contribuer](https://github.com/Dolibarr/dolibarr/blob/develop/.github/CONTRIBUTING.md)].
|
Ce projet existe grâce à ses nombreux contributeurs [[Contribuer](https://github.com/Dolibarr/dolibarr/blob/develop/.github/CONTRIBUTING.md)].
|
||||||
<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 est le résultat du travail de nombreux contributeurs depuis des années et utilise des librairies d'autres contributeurs.
|
Dolibarr est le résultat du travail de nombreux contributeurs depuis des années et utilise des librairies d'autres contributeurs.
|
||||||
|
|
||||||
Voir le fichier [COPYRIGHT](https://github.com/Dolibarr/dolibarr/blob/develop/COPYRIGHT)
|
Voir le fichier [COPYRIGHT](https://github.com/Dolibarr/dolibarr/blob/develop/COPYRIGHT)
|
||||||
|
|
||||||
|
|
||||||
## ACTUALITES ET RESEAUX SOCIAUX
|
## ACTUALITES ET RESEAUX SOCIAUX
|
||||||
|
|
||||||
Suivez le projet Dolibarr project sur les réseaux francophones
|
Suivez le projet Dolibarr project sur les réseaux francophones
|
||||||
|
|
||||||
- Facebook: <https://www.facebook.com/dolibarr.fr>
|
- [Facebook](https://www.facebook.com/dolibarr.fr)
|
||||||
- Google+: <https://plus.google.com/+DolibarrFrance>
|
- [Twitter](https://www.twitter.com/dolibarr_france)
|
||||||
- Twitter: <https://www.twitter.com/dolibarr_france>
|
|
||||||
|
|
||||||
ou sur les réseaux anglophones
|
ou sur les réseaux anglophones
|
||||||
|
|
||||||
- [Facebook](https://www.facebook.com/dolibarr)
|
- [Facebook](https://www.facebook.com/dolibarr)
|
||||||
- [Google+](https://plus.google.com/+DolibarrOrg)
|
|
||||||
- [Twitter](https://www.twitter.com/dolibarr)
|
- [Twitter](https://www.twitter.com/dolibarr)
|
||||||
- [LinkedIn](https://www.linkedin.com/company/association-dolibarr)
|
- [LinkedIn](https://www.linkedin.com/company/association-dolibarr)
|
||||||
- [YouTube](https://www.youtube.com/user/DolibarrERPCRM)
|
- [YouTube](https://www.youtube.com/user/DolibarrERPCRM)
|
||||||
|
|||||||
29
README.md
@ -1,10 +1,7 @@
|
|||||||
# DOLIBARR ERP & CRM
|
# DOLIBARR ERP & CRM
|
||||||
|
|
||||||

|

|
||||||
|

|
||||||
|7|8|9|10|develop|
|
|
||||||
|----------|----------|----------|----------|----------|
|
|
||||||
||||||
|
|
||||||
|
|
||||||
Dolibarr ERP & CRM is a modern software package to manage your organization's activity (contacts, suppliers, invoices, orders, stocks, agenda…).
|
Dolibarr ERP & CRM is a modern software package to manage your organization's activity (contacts, suppliers, invoices, orders, stocks, agenda…).
|
||||||
|
|
||||||
@ -14,8 +11,7 @@ You can freely use, study, modify or distribute it according to its Free Softwar
|
|||||||
|
|
||||||
You can use it as a standalone application or as a web application to be able to access it from the Internet or a LAN.
|
You can use it as a standalone application or as a web application to be able to access it from the Internet or a LAN.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
||||||
## LICENSE
|
## LICENSE
|
||||||
|
|
||||||
@ -25,7 +21,6 @@ See the [COPYING](https://github.com/Dolibarr/dolibarr/blob/develop/COPYING) fil
|
|||||||
|
|
||||||
Other licenses apply for some included dependencies. See [COPYRIGHT](https://github.com/Dolibarr/dolibarr/blob/develop/COPYRIGHT) for a full list.
|
Other licenses apply for some included dependencies. See [COPYRIGHT](https://github.com/Dolibarr/dolibarr/blob/develop/COPYRIGHT) for a full list.
|
||||||
|
|
||||||
|
|
||||||
## INSTALLING
|
## INSTALLING
|
||||||
|
|
||||||
### Simple setup
|
### Simple setup
|
||||||
@ -44,7 +39,7 @@ You can use a Web server and a supported database (MariaDB, MySQL or PostgreSQL)
|
|||||||
|
|
||||||
- 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 known git):
|
- 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 known git):
|
||||||
|
|
||||||
git clone https://github.com/dolibarr/dolibarr -b x.y (where x.y is main version like 3.6, 9.0, ...)
|
`git clone https://github.com/dolibarr/dolibarr -b x.y` (where x.y is main version like 3.6, 9.0, ...)
|
||||||
|
|
||||||
- Set up your web server to use "*dolibarr/htdocs*" as root if your web server does not have an already defined directory to point to.
|
- Set up your web server to use "*dolibarr/htdocs*" as root if your web server does not have an already defined directory to point to.
|
||||||
|
|
||||||
@ -54,15 +49,15 @@ You can use a Web server and a supported database (MariaDB, MySQL or PostgreSQL)
|
|||||||
|
|
||||||
The URL will depends on how you web setup was setup to point to your dolibarr installation. It may looks like:
|
The URL will depends on how you web setup was setup to point to your dolibarr installation. It may looks like:
|
||||||
|
|
||||||
http://localhost/dolibarr/htdocs/install/
|
`http://localhost/dolibarr/htdocs/install/`
|
||||||
|
|
||||||
or
|
or
|
||||||
|
|
||||||
http://localhost/dolibarr/install/
|
`http://localhost/dolibarr/install/`
|
||||||
|
|
||||||
or
|
or
|
||||||
|
|
||||||
http://yourdolibarrvirtualhost/install/
|
`http://yourdolibarrvirtualhost/install/`
|
||||||
|
|
||||||
- Follow the installer instructions
|
- Follow the installer instructions
|
||||||
|
|
||||||
@ -70,8 +65,6 @@ You can use a Web server and a supported database (MariaDB, MySQL or PostgreSQL)
|
|||||||
|
|
||||||
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.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## UPGRADING
|
## UPGRADING
|
||||||
|
|
||||||
- At first make a backup of your Dolibarr files & than see https://wiki.dolibarr.org/index.php/Installation_-_Upgrade#Upgrade_Dolibarr
|
- At first make a backup of your Dolibarr files & than see https://wiki.dolibarr.org/index.php/Installation_-_Upgrade#Upgrade_Dolibarr
|
||||||
@ -81,12 +74,10 @@ If you don't have time to install it yourself, you can try some commercial 'read
|
|||||||
|
|
||||||
*Note: migration process can be safely done multiple times by calling the `/install/index.php` page*
|
*Note: migration process can be safely done multiple times by calling the `/install/index.php` page*
|
||||||
|
|
||||||
|
|
||||||
## 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)
|
||||||
@ -160,12 +151,10 @@ See the [ChangeLog](https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog)
|
|||||||
- 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.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))
|
||||||
- Compatible with all Cloud solutions that match MySQL, PHP or PostgreSQL prerequisites.
|
- Compatible with all Cloud solutions that match MySQL, PHP 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:
|
||||||
@ -175,37 +164,31 @@ These are features that Dolibarr does **not** yet fully support:
|
|||||||
- No native embedded Webmail
|
- No native embedded Webmail
|
||||||
- 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 on the [Wiki](https://wiki.dolibarr.org).
|
Administrator, user, developer and translator's documentations are available along with other community resources on 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. [[Contribute](https://github.com/Dolibarr/dolibarr/blob/develop/.github/CONTRIBUTING.md)].
|
||||||
<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 libraries.
|
Dolibarr is the work of many contributors over the years and uses some fine 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:
|
||||||
|
|
||||||
- [Facebook](https://www.facebook.com/dolibarr)
|
- [Facebook](https://www.facebook.com/dolibarr)
|
||||||
- [Google+](https://plus.google.com/+DolibarrOrg)
|
|
||||||
- [Twitter](https://www.twitter.com/dolibarr)
|
- [Twitter](https://www.twitter.com/dolibarr)
|
||||||
- [LinkedIn](https://www.linkedin.com/company/association-dolibarr)
|
- [LinkedIn](https://www.linkedin.com/company/association-dolibarr)
|
||||||
- [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)]
|
||||||
|
|||||||
@ -36,7 +36,7 @@ Note: Prerequisites to build autoexe DoliWamp package:
|
|||||||
> perl makepack-dolibarrmodule.pl
|
> perl makepack-dolibarrmodule.pl
|
||||||
|
|
||||||
- To build developper documentation, launch the script
|
- To build developper documentation, launch the script
|
||||||
> perl dolybarr-doxygen-build.pl
|
> perl dolibarr-doxygen-build.pl
|
||||||
|
|
||||||
|
|
||||||
Note:
|
Note:
|
||||||
|
|||||||
@ -1,31 +1,38 @@
|
|||||||
FROM php:7.0-apache
|
FROM php:7.2-apache
|
||||||
|
|
||||||
ENV HOST_USER_ID 33
|
ENV HOST_USER_ID 33
|
||||||
ENV PHP_INI_DATE_TIMEZONE 'UTC'
|
ENV PHP_INI_DATE_TIMEZONE 'UTC'
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y libpng-dev libjpeg-dev libldap2-dev \
|
RUN apt-get update && apt-get install -y libpng-dev libjpeg-dev libldap2-dev libzip-dev zlib1g-dev libicu-dev g++\
|
||||||
&& rm -rf /var/lib/apt/lists/* \
|
&& rm -rf /var/lib/apt/lists/* \
|
||||||
&& docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr \
|
&& docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr \
|
||||||
&& docker-php-ext-install gd \
|
&& docker-php-ext-install gd \
|
||||||
|
&& docker-php-ext-install zip \
|
||||||
&& docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ \
|
&& docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ \
|
||||||
&& docker-php-ext-install ldap \
|
&& docker-php-ext-install ldap \
|
||||||
&& docker-php-ext-install mysqli \
|
&& docker-php-ext-install mysqli \
|
||||||
&& apt-get purge -y libjpeg-dev libldap2-dev
|
&& docker-php-ext-install calendar \
|
||||||
|
&& docker-php-ext-configure intl \
|
||||||
|
&& docker-php-ext-install intl \
|
||||||
|
&& apt-get autoremove --purge -y libjpeg-dev libldap2-dev zlib1g-dev libicu-dev g++
|
||||||
|
|
||||||
|
RUN mkdir /var/documents
|
||||||
|
RUN chown www-data /var/documents
|
||||||
|
|
||||||
COPY docker-run.sh /usr/local/bin/
|
COPY docker-run.sh /usr/local/bin/
|
||||||
RUN chmod +x /usr/local/bin/docker-run.sh
|
RUN chmod +x /usr/local/bin/docker-run.sh
|
||||||
|
|
||||||
RUN pecl install xdebug-2.5.5 && docker-php-ext-enable xdebug
|
RUN pecl install xdebug && docker-php-ext-enable xdebug
|
||||||
RUN echo 'zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20151012/xdebug.so"' >> /usr/local/etc/php/php.ini
|
RUN echo 'zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20151012/xdebug.so"' >> /usr/local/etc/php/php.ini
|
||||||
RUN echo 'xdebug.remote_autostart=0' >> /usr/local/etc/php/php.ini
|
RUN echo 'xdebug.remote_autostart=0' >> /usr/local/etc/php/php.ini
|
||||||
RUN echo 'xdebug.remote_enable=1' >> /usr/local/etc/php/php.ini
|
RUN echo 'xdebug.remote_enable=1' >> /usr/local/etc/php/php.ini
|
||||||
RUN echo 'xdebug.default_enable=0' >> /usr/local/etc/php/php.ini
|
RUN echo 'xdebug.default_enable=0' >> /usr/local/etc/php/php.ini
|
||||||
RUN echo 'xdebug.remote_host=docker.for.mac.host.internal' >> /usr/local/etc/php/php.ini
|
RUN echo 'xdebug.remote_host=docker.host' >> /usr/local/etc/php/php.ini
|
||||||
RUN echo 'xdebug.remote_port=9000' >> /usr/local/etc/php/php.ini
|
RUN echo 'xdebug.remote_port=9000' >> /usr/local/etc/php/php.ini
|
||||||
RUN echo 'xdebug.remote_connect_back=0' >> /usr/local/etc/php/php.ini
|
RUN echo 'xdebug.remote_connect_back=0' >> /usr/local/etc/php/php.ini
|
||||||
RUN echo 'xdebug.profiler_enable=0' >> /usr/local/etc/php/php.ini
|
RUN echo 'xdebug.profiler_enable=0' >> /usr/local/etc/php/php.ini
|
||||||
RUN echo 'xdebug.remote_log="/tmp/xdebug.log"' >> /usr/local/etc/php/php.ini
|
RUN echo 'xdebug.remote_log="/tmp/xdebug.log"' >> /usr/local/etc/php/php.ini
|
||||||
|
RUN echo '172.17.0.1 docker.host' >> /etc/hosts
|
||||||
|
|
||||||
EXPOSE 80
|
EXPOSE 80
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
mariadb:
|
mariadb:
|
||||||
image: mariadb:latest
|
build: mariadb
|
||||||
environment:
|
environment:
|
||||||
MYSQL_ROOT_PASSWORD: root
|
MYSQL_ROOT_PASSWORD: root
|
||||||
MYSQL_DATABASE: dolibarr
|
MYSQL_DATABASE: dolibarr
|
||||||
|
|||||||
@ -3,7 +3,8 @@
|
|||||||
usermod -u $HOST_USER_ID www-data
|
usermod -u $HOST_USER_ID www-data
|
||||||
groupmod -g $HOST_USER_ID www-data
|
groupmod -g $HOST_USER_ID www-data
|
||||||
|
|
||||||
chown -hR www-data:www-data /var/www
|
chgrp -hR www-data /var/www/html
|
||||||
|
chmod g+rwx /var/www/html/conf
|
||||||
|
|
||||||
if [ ! -f /usr/local/etc/php/php.ini ]; then
|
if [ ! -f /usr/local/etc/php/php.ini ]; then
|
||||||
cat <<EOF > /usr/local/etc/php/php.ini
|
cat <<EOF > /usr/local/etc/php/php.ini
|
||||||
|
|||||||
3
build/docker/mariadb/Dockerfile
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
FROM mariadb:latest
|
||||||
|
# Enable comented out UTF8 charset/collation options
|
||||||
|
RUN sed '/utf8/ s/^#//' /etc/mysql/mariadb.cnf >/tmp/t && mv /tmp/t /etc/mysql/mariadb.cnf
|
||||||
@ -145,7 +145,7 @@ $iterator1 = new RecursiveIteratorIterator($dir_iterator1);
|
|||||||
// Need to ignore document custom etc. Note: this also ignore natively symbolic links.
|
// Need to ignore document custom etc. Note: this also ignore natively symbolic links.
|
||||||
$files = new RegexIterator($iterator1, '#^(?:[A-Z]:)?(?:/(?!(?:'.($includecustom?'':'custom\/|').'documents\/|conf\/|install\/))[^/]+)+/[^/]+\.(?:php|css|html|js|json|tpl|jpg|png|gif|sql|lang)$#i');
|
$files = new RegexIterator($iterator1, '#^(?:[A-Z]:)?(?:/(?!(?:'.($includecustom?'':'custom\/|').'documents\/|conf\/|install\/))[^/]+)+/[^/]+\.(?:php|css|html|js|json|tpl|jpg|png|gif|sql|lang)$#i');
|
||||||
*/
|
*/
|
||||||
$regextoinclude='\.(php|css|html|js|json|tpl|jpg|png|gif|sql|lang)$';
|
$regextoinclude='\.(php|php3|php4|php5|phtml|phps|phar|inc|css|scss|html|xml|js|json|tpl|jpg|jpeg|png|gif|ico|sql|lang|txt|yml|md|mp3|mp4|wav|mkv|z|gz|zip|rar|tar|less|svg|eot|woff|woff2|ttf|manifest)$';
|
||||||
$regextoexclude='('.($includecustom?'':'custom|').'documents|conf|install|public\/test|Shared\/PCLZip|nusoap\/lib\/Mail|php\/example|php\/test|geoip\/sample.*\.php|ckeditor\/samples|ckeditor\/adapters)$'; // Exclude dirs
|
$regextoexclude='('.($includecustom?'':'custom|').'documents|conf|install|public\/test|Shared\/PCLZip|nusoap\/lib\/Mail|php\/example|php\/test|geoip\/sample.*\.php|ckeditor\/samples|ckeditor\/adapters)$'; // Exclude dirs
|
||||||
$files = dol_dir_list(DOL_DOCUMENT_ROOT, 'files', 1, $regextoinclude, $regextoexclude, 'fullname');
|
$files = dol_dir_list(DOL_DOCUMENT_ROOT, 'files', 1, $regextoinclude, $regextoexclude, 'fullname');
|
||||||
$dir='';
|
$dir='';
|
||||||
|
|||||||
@ -52,6 +52,36 @@ Replace call to serialize_val with no bugged value
|
|||||||
|
|
||||||
TCPDF:
|
TCPDF:
|
||||||
------
|
------
|
||||||
|
* Replace in tcpdf.php:
|
||||||
|
|
||||||
|
if (isset($this->imagekeys)) {
|
||||||
|
foreach($this->imagekeys as $file) {
|
||||||
|
unlink($file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
with
|
||||||
|
|
||||||
|
if (isset($this->imagekeys)) {
|
||||||
|
foreach($this->imagekeys as $file) {
|
||||||
|
// unlink($file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
* In tecnickcom/tcpdf/include/tcpdf_static, in function fopenLocal, replace
|
||||||
|
|
||||||
|
if (strpos($filename, '://') === false) {
|
||||||
|
|
||||||
|
with
|
||||||
|
|
||||||
|
if (strpos($filename, '//') === 0)
|
||||||
|
{
|
||||||
|
// Share folder on a (windows) server
|
||||||
|
// e.g.: "//[MyServerName]/[MySharedFolder]/"
|
||||||
|
//
|
||||||
|
// nothing to change
|
||||||
|
}
|
||||||
|
elseif (strpos($filename, '://') === false)
|
||||||
|
|
||||||
* To avoid to have QRcode changed because generated with a random mask, replace
|
* To avoid to have QRcode changed because generated with a random mask, replace
|
||||||
define('QR_FIND_FROM_RANDOM', 2);
|
define('QR_FIND_FROM_RANDOM', 2);
|
||||||
with
|
with
|
||||||
|
|||||||
@ -64,6 +64,10 @@ $sqls=array(
|
|||||||
"DELETE FROM ".MAIN_DB_PREFIX."paiement_facture where fk_facture IN (select rowid FROM ".MAIN_DB_PREFIX."facture where datec < '__DATE__')",
|
"DELETE FROM ".MAIN_DB_PREFIX."paiement_facture where fk_facture IN (select rowid FROM ".MAIN_DB_PREFIX."facture where datec < '__DATE__')",
|
||||||
"DELETE FROM ".MAIN_DB_PREFIX."paiement where rowid NOT IN (SELECT fk_paiement FROM ".MAIN_DB_PREFIX."paiement_facture)",
|
"DELETE FROM ".MAIN_DB_PREFIX."paiement where rowid NOT IN (SELECT fk_paiement FROM ".MAIN_DB_PREFIX."paiement_facture)",
|
||||||
),
|
),
|
||||||
|
'supplier_payment'=>array(
|
||||||
|
"DELETE FROM ".MAIN_DB_PREFIX."paiementfourn_facturefourn where fk_facturefourn IN (select rowid FROM ".MAIN_DB_PREFIX."facture_fourn where datec < '__DATE__')",
|
||||||
|
"DELETE FROM ".MAIN_DB_PREFIX."paiementfourn where rowid NOT IN (SELECT fk_paiementfourn FROM ".MAIN_DB_PREFIX."paiementfourn_facturefourn)",
|
||||||
|
),
|
||||||
'bank'=>array(
|
'bank'=>array(
|
||||||
"DELETE FROM ".MAIN_DB_PREFIX."bank_class WHERE lineid IN (SELECT rowid FROM ".MAIN_DB_PREFIX."bank WHERE datec < '__DATE__')",
|
"DELETE FROM ".MAIN_DB_PREFIX."bank_class WHERE lineid IN (SELECT rowid FROM ".MAIN_DB_PREFIX."bank WHERE datec < '__DATE__')",
|
||||||
"DELETE FROM ".MAIN_DB_PREFIX."bank_url WHERE fk_bank IN (SELECT rowid FROM ".MAIN_DB_PREFIX."bank WHERE datec < '__DATE__')",
|
"DELETE FROM ".MAIN_DB_PREFIX."bank_url WHERE fk_bank IN (SELECT rowid FROM ".MAIN_DB_PREFIX."bank WHERE datec < '__DATE__')",
|
||||||
@ -103,6 +107,7 @@ $sqls=array(
|
|||||||
"DELETE FROM ".MAIN_DB_PREFIX."commande_fournisseur where date_creation < '__DATE__'",
|
"DELETE FROM ".MAIN_DB_PREFIX."commande_fournisseur where date_creation < '__DATE__'",
|
||||||
),
|
),
|
||||||
'supplier_invoice'=>array(
|
'supplier_invoice'=>array(
|
||||||
|
'@supplier_payment',
|
||||||
"DELETE FROM ".MAIN_DB_PREFIX."facture_fourn_det WHERE fk_facture_fourn IN (select rowid FROM ".MAIN_DB_PREFIX."facture_fourn where datec < '__DATE__')",
|
"DELETE FROM ".MAIN_DB_PREFIX."facture_fourn_det WHERE fk_facture_fourn IN (select rowid FROM ".MAIN_DB_PREFIX."facture_fourn where datec < '__DATE__')",
|
||||||
"DELETE FROM ".MAIN_DB_PREFIX."facture_fourn where datec < '__DATE__'",
|
"DELETE FROM ".MAIN_DB_PREFIX."facture_fourn where datec < '__DATE__'",
|
||||||
),
|
),
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 142 KiB |
|
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 122 KiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 113 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
BIN
dev/initdemo/documents_demo/societe/12/courrier_consult.odt
Normal file
BIN
dev/initdemo/documents_demo/societe/12/logos/person8.jpeg
Normal file
|
After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 5.8 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 4.8 KiB |
BIN
dev/initdemo/documents_demo/societe/12/radiography1.jpg
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
dev/initdemo/documents_demo/societe/12/radiography2-knee.jpg
Normal file
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 154 KiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 172 KiB |
|
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 147 KiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 148 KiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 143 KiB |
|
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 142 KiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 113 KiB |
|
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 122 KiB |
|
Before Width: | Height: | Size: 991 KiB After Width: | Height: | Size: 117 KiB |
7066
dev/initdemo/mysqldump_dolibarr_3.5.0.sql
Normal file
@ -245,18 +245,6 @@ export list="
|
|||||||
--ignore-table=$base.llx_c_ticketsup_category
|
--ignore-table=$base.llx_c_ticketsup_category
|
||||||
--ignore-table=$base.llx_c_ticketsup_severity
|
--ignore-table=$base.llx_c_ticketsup_severity
|
||||||
--ignore-table=$base.llx_c_ticketsup_type
|
--ignore-table=$base.llx_c_ticketsup_type
|
||||||
--ignore-table=$base.llx_cabinetmed_c_banques
|
|
||||||
--ignore-table=$base.llx_cabinetmed_c_ccam
|
|
||||||
--ignore-table=$base.llx_cabinetmed_c_examconclusion
|
|
||||||
--ignore-table=$base.llx_cabinetmed_cons
|
|
||||||
--ignore-table=$base.llx_cabinetmed_cons_extrafields
|
|
||||||
--ignore-table=$base.llx_cabinetmed_diaglec
|
|
||||||
--ignore-table=$base.llx_cabinetmed_examaut
|
|
||||||
--ignore-table=$base.llx_cabinetmed_exambio
|
|
||||||
--ignore-table=$base.llx_cabinetmed_examenprescrit
|
|
||||||
--ignore-table=$base.llx_cabinetmed_motifcons
|
|
||||||
--ignore-table=$base.llx_cabinetmed_patient
|
|
||||||
--ignore-table=$base.llx_cabinetmed_societe
|
|
||||||
--ignore-table=$base.llx_congespayes
|
--ignore-table=$base.llx_congespayes
|
||||||
--ignore-table=$base.llx_congespayes_config
|
--ignore-table=$base.llx_congespayes_config
|
||||||
--ignore-table=$base.llx_congespayes_events
|
--ignore-table=$base.llx_congespayes_events
|
||||||
@ -300,6 +288,7 @@ export list="
|
|||||||
--ignore-table=$base.llx_m_extrafields
|
--ignore-table=$base.llx_m_extrafields
|
||||||
--ignore-table=$base.llx_monmodule_abcdef
|
--ignore-table=$base.llx_monmodule_abcdef
|
||||||
--ignore-table=$base.llx_notes
|
--ignore-table=$base.llx_notes
|
||||||
|
--ignore-table=$base.llx_packages
|
||||||
--ignore-table=$base.llx_pos_cash
|
--ignore-table=$base.llx_pos_cash
|
||||||
--ignore-table=$base.llx_pos_control_cash
|
--ignore-table=$base.llx_pos_control_cash
|
||||||
--ignore-table=$base.llx_pos_facture
|
--ignore-table=$base.llx_pos_facture
|
||||||
@ -316,6 +305,7 @@ export list="
|
|||||||
--ignore-table=$base.llx_residence_building
|
--ignore-table=$base.llx_residence_building
|
||||||
--ignore-table=$base.llx_residence_building_links
|
--ignore-table=$base.llx_residence_building_links
|
||||||
--ignore-table=$base.llx_societe_rib2
|
--ignore-table=$base.llx_societe_rib2
|
||||||
|
--ignore-table=$base.llx_sellyoursaas_cancellation
|
||||||
--ignore-table=$base.llx_ticketsup
|
--ignore-table=$base.llx_ticketsup
|
||||||
--ignore-table=$base.llx_ultimatepdf
|
--ignore-table=$base.llx_ultimatepdf
|
||||||
--ignore-table=$base.llx_update_modules
|
--ignore-table=$base.llx_update_modules
|
||||||
|
|||||||
@ -7,13 +7,18 @@
|
|||||||
# Usage: txpull.sh (all|xx_XX) [-r dolibarr.file] [-f]
|
# Usage: txpull.sh (all|xx_XX) [-r dolibarr.file] [-f]
|
||||||
#------------------------------------------------------
|
#------------------------------------------------------
|
||||||
|
|
||||||
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||||
|
cd $DIR/../..
|
||||||
|
|
||||||
# Syntax
|
# Syntax
|
||||||
if [ "x$1" = "x" ]
|
if [ "x$1" = "x" ]
|
||||||
then
|
then
|
||||||
echo "This pull remote transifex files to local dir."
|
echo "This pull remote transifex files to local dir."
|
||||||
echo "Note: If you pull a language file (not source), file will be skipped if local file is newer."
|
echo "Note: If you pull a language file (not source), file will be skipped if local file is newer."
|
||||||
echo " Using -f will overwrite local file (does not work with 'all')."
|
echo " Using -f will overwrite local file (does not work with 'all')."
|
||||||
echo "Usage: ./dev/translation/txpull.sh (all|xx_XX) [-r dolibarr.file] [-f] [-s]"
|
echo " Using -s will force fetching of source file (avoid it, use en_US as language instead)."
|
||||||
|
echo " Using en_US as language parameter will update source language from transifex (en_US is excluded from 'all')."
|
||||||
|
echo "Usage: ./dev/translation/txpull.sh (all|en_US|xx_XX) [-r dolibarr.file] [-f] [-s]"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@ -9,6 +9,9 @@
|
|||||||
|
|
||||||
export project='dolibarr'
|
export project='dolibarr'
|
||||||
|
|
||||||
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||||
|
cd $DIR/../..
|
||||||
|
|
||||||
# Syntax
|
# Syntax
|
||||||
if [ "x$1" = "x" ]
|
if [ "x$1" = "x" ]
|
||||||
then
|
then
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 212 KiB |
BIN
doc/images/dolibarr_screenshot10_1920x1080.jpg
Normal file
|
After Width: | Height: | Size: 304 KiB |
|
Before Width: | Height: | Size: 208 KiB |
BIN
doc/images/dolibarr_screenshot1_1280x800.jpg
Normal file
|
After Width: | Height: | Size: 143 KiB |
|
Before Width: | Height: | Size: 246 KiB |
|
Before Width: | Height: | Size: 256 KiB |
|
Before Width: | Height: | Size: 250 KiB |
BIN
doc/images/dolibarr_screenshot1_1920x1080.jpg
Normal file
|
After Width: | Height: | Size: 357 KiB |
|
Before Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 98 KiB |
BIN
doc/images/dolibarr_screenshot2_1280x800.jpg
Normal file
|
After Width: | Height: | Size: 164 KiB |
|
Before Width: | Height: | Size: 228 KiB |
|
Before Width: | Height: | Size: 176 KiB |
|
Before Width: | Height: | Size: 171 KiB |
BIN
doc/images/dolibarr_screenshot4_1920x1080.jpg
Normal file
|
After Width: | Height: | Size: 195 KiB |
BIN
doc/images/dolibarr_screenshot5_1280x800.jpg
Normal file
|
After Width: | Height: | Size: 135 KiB |
|
Before Width: | Height: | Size: 268 KiB After Width: | Height: | Size: 265 KiB |
|
Before Width: | Height: | Size: 175 KiB |
BIN
doc/images/dolibarr_screenshot6_1920x1080.jpg
Normal file
|
After Width: | Height: | Size: 206 KiB |
|
Before Width: | Height: | Size: 156 KiB |
BIN
doc/images/dolibarr_screenshot7_1920x1080.jpg
Normal file
|
After Width: | Height: | Size: 157 KiB |
|
Before Width: | Height: | Size: 232 KiB |
BIN
doc/images/dolibarr_screenshot8_1920x1080.jpg
Normal file
|
After Width: | Height: | Size: 219 KiB |
|
Before Width: | Height: | Size: 171 KiB |
|
Before Width: | Height: | Size: 200 KiB |
BIN
doc/images/dolibarr_screenshot9_1920x1080.jpg
Normal file
|
After Width: | Height: | Size: 220 KiB |
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/* Copyright (C) 2013-2016 Olivier Geffroy <jeff@jeffinfo.com>
|
/* Copyright (C) 2013-2016 Olivier Geffroy <jeff@jeffinfo.com>
|
||||||
* Copyright (C) 2013-2017 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
* Copyright (C) 2013-2020 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||||
* Copyright (C) 2016-2018 Laurent Destailleur <eldy@users.sourceforge.net>
|
* Copyright (C) 2016-2018 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
@ -41,6 +41,7 @@ $contextpage = GETPOST('contextpage', 'aZ') ?GETPOST('contextpage', 'aZ') : 'acc
|
|||||||
|
|
||||||
$search_account = GETPOST('search_account', 'alpha');
|
$search_account = GETPOST('search_account', 'alpha');
|
||||||
$search_label = GETPOST('search_label', 'alpha');
|
$search_label = GETPOST('search_label', 'alpha');
|
||||||
|
$search_labelshort = GETPOST('search_labelshort', 'alpha');
|
||||||
$search_accountparent = GETPOST('search_accountparent', 'alpha');
|
$search_accountparent = GETPOST('search_accountparent', 'alpha');
|
||||||
$search_pcgtype = GETPOST('search_pcgtype', 'alpha');
|
$search_pcgtype = GETPOST('search_pcgtype', 'alpha');
|
||||||
$search_pcgsubtype = GETPOST('search_pcgsubtype', 'alpha');
|
$search_pcgsubtype = GETPOST('search_pcgsubtype', 'alpha');
|
||||||
@ -64,6 +65,7 @@ if (!$sortorder) $sortorder = "ASC";
|
|||||||
$arrayfields = array(
|
$arrayfields = array(
|
||||||
'aa.account_number'=>array('label'=>$langs->trans("AccountNumber"), 'checked'=>1),
|
'aa.account_number'=>array('label'=>$langs->trans("AccountNumber"), 'checked'=>1),
|
||||||
'aa.label'=>array('label'=>$langs->trans("Label"), 'checked'=>1),
|
'aa.label'=>array('label'=>$langs->trans("Label"), 'checked'=>1),
|
||||||
|
'aa.labelshort'=>array('label'=>$langs->trans("LabelToShow"), 'checked'=>1),
|
||||||
'aa.account_parent'=>array('label'=>$langs->trans("Accountparent"), 'checked'=>1),
|
'aa.account_parent'=>array('label'=>$langs->trans("Accountparent"), 'checked'=>1),
|
||||||
'aa.pcg_type'=>array('label'=>$langs->trans("Pcgtype"), 'checked'=>1, 'help'=>'PcgtypeDesc'),
|
'aa.pcg_type'=>array('label'=>$langs->trans("Pcgtype"), 'checked'=>1, 'help'=>'PcgtypeDesc'),
|
||||||
'aa.pcg_subtype'=>array('label'=>$langs->trans("Pcgsubtype"), 'checked'=>0, 'help'=>'PcgtypeDesc'),
|
'aa.pcg_subtype'=>array('label'=>$langs->trans("Pcgsubtype"), 'checked'=>0, 'help'=>'PcgtypeDesc'),
|
||||||
@ -95,6 +97,7 @@ if (empty($reshook))
|
|||||||
{
|
{
|
||||||
$search_account = "";
|
$search_account = "";
|
||||||
$search_label = "";
|
$search_label = "";
|
||||||
|
$search_labelshort = "";
|
||||||
$search_accountparent = "";
|
$search_accountparent = "";
|
||||||
$search_pcgtype = "";
|
$search_pcgtype = "";
|
||||||
$search_pcgsubtype = "";
|
$search_pcgsubtype = "";
|
||||||
@ -190,7 +193,7 @@ if ($action == 'delete') {
|
|||||||
|
|
||||||
$pcgver = $conf->global->CHARTOFACCOUNTS;
|
$pcgver = $conf->global->CHARTOFACCOUNTS;
|
||||||
|
|
||||||
$sql = "SELECT aa.rowid, aa.fk_pcg_version, aa.pcg_type, aa.pcg_subtype, aa.account_number, aa.account_parent , aa.label, aa.active, ";
|
$sql = "SELECT aa.rowid, aa.fk_pcg_version, aa.pcg_type, aa.pcg_subtype, aa.account_number, aa.account_parent , aa.label, aa.labelshort, aa.active, ";
|
||||||
$sql .= " a2.rowid as rowid2, a2.label as label2, a2.account_number as account_number2";
|
$sql .= " a2.rowid as rowid2, a2.label as label2, a2.account_number as account_number2";
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."accounting_account as aa";
|
$sql .= " FROM ".MAIN_DB_PREFIX."accounting_account as aa";
|
||||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."accounting_system as asy ON aa.fk_pcg_version = asy.pcg_version AND aa.entity = ".$conf->entity;
|
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."accounting_system as asy ON aa.fk_pcg_version = asy.pcg_version AND aa.entity = ".$conf->entity;
|
||||||
@ -200,6 +203,7 @@ $sql .= " WHERE asy.rowid = ".$pcgver;
|
|||||||
//print $sql;
|
//print $sql;
|
||||||
if (strlen(trim($search_account))) $sql .= natural_search("aa.account_number", $search_account);
|
if (strlen(trim($search_account))) $sql .= natural_search("aa.account_number", $search_account);
|
||||||
if (strlen(trim($search_label))) $sql .= natural_search("aa.label", $search_label);
|
if (strlen(trim($search_label))) $sql .= natural_search("aa.label", $search_label);
|
||||||
|
if (strlen(trim($search_labelshort))) $sql .= natural_search("aa.labelshort", $search_labelshort);
|
||||||
if (strlen(trim($search_accountparent))) $sql .= natural_search("aa.account_parent", $search_accountparent);
|
if (strlen(trim($search_accountparent))) $sql .= natural_search("aa.account_parent", $search_accountparent);
|
||||||
if (strlen(trim($search_pcgtype))) $sql .= natural_search("aa.pcg_type", $search_pcgtype);
|
if (strlen(trim($search_pcgtype))) $sql .= natural_search("aa.pcg_type", $search_pcgtype);
|
||||||
if (strlen(trim($search_pcgsubtype))) $sql .= natural_search("aa.pcg_subtype", $search_pcgsubtype);
|
if (strlen(trim($search_pcgsubtype))) $sql .= natural_search("aa.pcg_subtype", $search_pcgsubtype);
|
||||||
@ -232,6 +236,7 @@ if ($resql)
|
|||||||
if ($limit > 0 && $limit != $conf->liste_limit) $param .= '&limit='.$limit;
|
if ($limit > 0 && $limit != $conf->liste_limit) $param .= '&limit='.$limit;
|
||||||
if ($search_account) $param .= '&search_account='.urlencode($search_account);
|
if ($search_account) $param .= '&search_account='.urlencode($search_account);
|
||||||
if ($search_label) $param .= '&search_label='.urlencode($search_label);
|
if ($search_label) $param .= '&search_label='.urlencode($search_label);
|
||||||
|
if ($search_labelshort) $param.= '&search_labelshort='.urlencode($search_labelshort);
|
||||||
if ($search_accountparent) $param .= '&search_accountparent='.urlencode($search_accountparent);
|
if ($search_accountparent) $param .= '&search_accountparent='.urlencode($search_accountparent);
|
||||||
if ($search_pcgtype) $param .= '&search_pcgtype='.urlencode($search_pcgtype);
|
if ($search_pcgtype) $param .= '&search_pcgtype='.urlencode($search_pcgtype);
|
||||||
if ($search_pcgsubtype) $param .= '&search_pcgsubtype='.urlencode($search_pcgsubtype);
|
if ($search_pcgsubtype) $param .= '&search_pcgsubtype='.urlencode($search_pcgsubtype);
|
||||||
@ -258,7 +263,7 @@ if ($resql)
|
|||||||
|
|
||||||
print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].'">';
|
print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].'">';
|
||||||
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
|
print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
|
||||||
print '<input type="hidden" name="action" value="list">';
|
print '<input type="hidden" name="action" value="list">';
|
||||||
print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
|
print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
|
||||||
@ -316,6 +321,7 @@ if ($resql)
|
|||||||
print '<tr class="liste_titre_filter">';
|
print '<tr class="liste_titre_filter">';
|
||||||
if (!empty($arrayfields['aa.account_number']['checked'])) print '<td class="liste_titre"><input type="text" class="flat" size="10" name="search_account" value="'.$search_account.'"></td>';
|
if (!empty($arrayfields['aa.account_number']['checked'])) print '<td class="liste_titre"><input type="text" class="flat" size="10" name="search_account" value="'.$search_account.'"></td>';
|
||||||
if (!empty($arrayfields['aa.label']['checked'])) print '<td class="liste_titre"><input type="text" class="flat" size="20" name="search_label" value="'.$search_label.'"></td>';
|
if (!empty($arrayfields['aa.label']['checked'])) print '<td class="liste_titre"><input type="text" class="flat" size="20" name="search_label" value="'.$search_label.'"></td>';
|
||||||
|
if (!empty($arrayfields['aa.labelshort']['checked'])) print '<td class="liste_titre"><input type="text" class="flat" size="20" name="search_labelshort" value="' . $search_labelshort . '"></td>';
|
||||||
if (!empty($arrayfields['aa.account_parent']['checked'])) print '<td class="liste_titre"><input type="text" class="flat" size="10" name="search_accountparent" value="'.$search_accountparent.'"></td>';
|
if (!empty($arrayfields['aa.account_parent']['checked'])) print '<td class="liste_titre"><input type="text" class="flat" size="10" name="search_accountparent" value="'.$search_accountparent.'"></td>';
|
||||||
if (!empty($arrayfields['aa.pcg_type']['checked'])) print '<td class="liste_titre"><input type="text" class="flat" size="6" name="search_pcgtype" value="'.$search_pcgtype.'"></td>';
|
if (!empty($arrayfields['aa.pcg_type']['checked'])) print '<td class="liste_titre"><input type="text" class="flat" size="6" name="search_pcgtype" value="'.$search_pcgtype.'"></td>';
|
||||||
if (!empty($arrayfields['aa.pcg_subtype']['checked'])) print '<td class="liste_titre"><input type="text" class="flat" size="6" name="search_pcgsubtype" value="'.$search_pcgsubtype.'"></td>';
|
if (!empty($arrayfields['aa.pcg_subtype']['checked'])) print '<td class="liste_titre"><input type="text" class="flat" size="6" name="search_pcgsubtype" value="'.$search_pcgsubtype.'"></td>';
|
||||||
@ -329,6 +335,7 @@ if ($resql)
|
|||||||
print '<tr class="liste_titre">';
|
print '<tr class="liste_titre">';
|
||||||
if (!empty($arrayfields['aa.account_number']['checked'])) print_liste_field_titre($arrayfields['aa.account_number']['label'], $_SERVER["PHP_SELF"], "aa.account_number", "", $param, '', $sortfield, $sortorder);
|
if (!empty($arrayfields['aa.account_number']['checked'])) print_liste_field_titre($arrayfields['aa.account_number']['label'], $_SERVER["PHP_SELF"], "aa.account_number", "", $param, '', $sortfield, $sortorder);
|
||||||
if (!empty($arrayfields['aa.label']['checked'])) print_liste_field_titre($arrayfields['aa.label']['label'], $_SERVER["PHP_SELF"], "aa.label", "", $param, '', $sortfield, $sortorder);
|
if (!empty($arrayfields['aa.label']['checked'])) print_liste_field_titre($arrayfields['aa.label']['label'], $_SERVER["PHP_SELF"], "aa.label", "", $param, '', $sortfield, $sortorder);
|
||||||
|
if (!empty($arrayfields['aa.labelshort']['checked'])) print_liste_field_titre($arrayfields['aa.labelshort']['label'], $_SERVER["PHP_SELF"], "aa.labelshort", "", $param, '', $sortfield, $sortorder);
|
||||||
if (!empty($arrayfields['aa.account_parent']['checked'])) print_liste_field_titre($arrayfields['aa.account_parent']['label'], $_SERVER["PHP_SELF"], "aa.account_parent", "", $param, '', $sortfield, $sortorder, 'left ');
|
if (!empty($arrayfields['aa.account_parent']['checked'])) print_liste_field_titre($arrayfields['aa.account_parent']['label'], $_SERVER["PHP_SELF"], "aa.account_parent", "", $param, '', $sortfield, $sortorder, 'left ');
|
||||||
if (!empty($arrayfields['aa.pcg_type']['checked'])) print_liste_field_titre($arrayfields['aa.pcg_type']['label'], $_SERVER["PHP_SELF"], 'aa.pcg_type', '', $param, '', $sortfield, $sortorder, '', $arrayfields['aa.pcg_type']['help']);
|
if (!empty($arrayfields['aa.pcg_type']['checked'])) print_liste_field_titre($arrayfields['aa.pcg_type']['label'], $_SERVER["PHP_SELF"], 'aa.pcg_type', '', $param, '', $sortfield, $sortorder, '', $arrayfields['aa.pcg_type']['help']);
|
||||||
if (!empty($arrayfields['aa.pcg_subtype']['checked'])) print_liste_field_titre($arrayfields['aa.pcg_subtype']['label'], $_SERVER["PHP_SELF"], 'aa.pcg_subtype', '', $param, '', $sortfield, $sortorder, '', $arrayfields['aa.pcg_subtype']['help']);
|
if (!empty($arrayfields['aa.pcg_subtype']['checked'])) print_liste_field_titre($arrayfields['aa.pcg_subtype']['label'], $_SERVER["PHP_SELF"], 'aa.pcg_subtype', '', $param, '', $sortfield, $sortorder, '', $arrayfields['aa.pcg_subtype']['help']);
|
||||||
@ -368,6 +375,15 @@ if ($resql)
|
|||||||
if (!$i) $totalarray['nbfield']++;
|
if (!$i) $totalarray['nbfield']++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Account label to show (label short)
|
||||||
|
if (! empty($arrayfields['aa.labelshort']['checked']))
|
||||||
|
{
|
||||||
|
print "<td>";
|
||||||
|
print $obj->labelshort;
|
||||||
|
print "</td>\n";
|
||||||
|
if (! $i) $totalarray['nbfield']++;
|
||||||
|
}
|
||||||
|
|
||||||
// Account parent
|
// Account parent
|
||||||
if (!empty($arrayfields['aa.account_parent']['checked']))
|
if (!empty($arrayfields['aa.account_parent']['checked']))
|
||||||
{
|
{
|
||||||
|
|||||||
@ -453,7 +453,7 @@ if ($id)
|
|||||||
$fieldlist=explode(',', $tabfield[$id]);
|
$fieldlist=explode(',', $tabfield[$id]);
|
||||||
|
|
||||||
print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$id.'" method="POST">';
|
print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$id.'" method="POST">';
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
|
|
||||||
print '<div class="div-table-responsive">';
|
print '<div class="div-table-responsive">';
|
||||||
print '<table class="noborder centpercent">';
|
print '<table class="noborder centpercent">';
|
||||||
@ -509,7 +509,7 @@ if ($id)
|
|||||||
print '</tr>';
|
print '</tr>';
|
||||||
|
|
||||||
// Line to enter new values
|
// Line to enter new values
|
||||||
print "<tr ".$bcnd[$var].">";
|
print '<tr class="oddeven">';
|
||||||
|
|
||||||
$obj = new stdClass();
|
$obj = new stdClass();
|
||||||
// If data was already input, we define them in obj to populate input fields.
|
// If data was already input, we define them in obj to populate input fields.
|
||||||
@ -597,44 +597,9 @@ if ($id)
|
|||||||
|
|
||||||
// Title of lines
|
// Title of lines
|
||||||
print '<tr class="liste_titre">';
|
print '<tr class="liste_titre">';
|
||||||
foreach ($fieldlist as $field => $value)
|
print getTitleFieldOfList($langs->trans("Pcg_version"), 0, $_SERVER["PHP_SELF"], "pcg_version", ($page?'page='.$page.'&':''), $param, '', $sortfield, $sortorder, '');
|
||||||
{
|
print getTitleFieldOfList($langs->trans("Label"), 0, $_SERVER["PHP_SELF"], "label", ($page?'page='.$page.'&':''), $param, '', $sortfield, $sortorder, '');
|
||||||
// Determine le nom du champ par rapport aux noms possibles
|
print getTitleFieldOfList($langs->trans("Country"), 0, $_SERVER["PHP_SELF"], "country_code", ($page?'page='.$page.'&':''), $param, '', $sortfield, $sortorder, '');
|
||||||
// dans les dictionnaires de donnees
|
|
||||||
$showfield=1; // By defaut
|
|
||||||
$class="left";
|
|
||||||
$sortable=1;
|
|
||||||
$valuetoshow='';
|
|
||||||
/*
|
|
||||||
$tmparray=getLabelOfField($fieldlist[$field]);
|
|
||||||
$showfield=$tmp['showfield'];
|
|
||||||
$valuetoshow=$tmp['valuetoshow'];
|
|
||||||
$align=$tmp['align'];
|
|
||||||
$sortable=$tmp['sortable'];
|
|
||||||
*/
|
|
||||||
$valuetoshow=ucfirst($fieldlist[$field]); // By defaut
|
|
||||||
$valuetoshow=$langs->trans($valuetoshow); // try to translate
|
|
||||||
if ($fieldlist[$field]=='code') {
|
|
||||||
$valuetoshow=$langs->trans("Code");
|
|
||||||
}
|
|
||||||
if ($fieldlist[$field]=='libelle' || $fieldlist[$field]=='label') {
|
|
||||||
$valuetoshow=$langs->trans("Label");
|
|
||||||
}
|
|
||||||
if ($fieldlist[$field]=='country') {
|
|
||||||
$valuetoshow=$langs->trans("Country");
|
|
||||||
}
|
|
||||||
if ($fieldlist[$field]=='country_id') {
|
|
||||||
$showfield=0;
|
|
||||||
}
|
|
||||||
if ($fieldlist[$field]=='fk_pcg_version') {
|
|
||||||
$valuetoshow=$langs->trans("Pcg_version");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Affiche nom du champ
|
|
||||||
if ($showfield) {
|
|
||||||
print getTitleFieldOfList($valuetoshow, 0, $_SERVER["PHP_SELF"], ($sortable?$fieldlist[$field]:''), ($page?'page='.$page.'&':''), $param, "", $sortfield, $sortorder, $class.' ');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
print getTitleFieldOfList($langs->trans("Status"), 0, $_SERVER["PHP_SELF"], "active", ($page?'page='.$page.'&':''), $param, '', $sortfield, $sortorder, 'center ');
|
print getTitleFieldOfList($langs->trans("Status"), 0, $_SERVER["PHP_SELF"], "active", ($page?'page='.$page.'&':''), $param, '', $sortfield, $sortorder, 'center ');
|
||||||
print getTitleFieldOfList('');
|
print getTitleFieldOfList('');
|
||||||
print getTitleFieldOfList('');
|
print getTitleFieldOfList('');
|
||||||
@ -651,7 +616,7 @@ if ($id)
|
|||||||
if ($action == 'edit' && ($rowid == (! empty($obj->rowid)?$obj->rowid:$obj->code)))
|
if ($action == 'edit' && ($rowid == (! empty($obj->rowid)?$obj->rowid:$obj->code)))
|
||||||
{
|
{
|
||||||
print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$id.'" method="POST">';
|
print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$id.'" method="POST">';
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
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.'">';
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/* Copyright (C) 2013-2014 Olivier Geffroy <jeff@jeffinfo.com>
|
/* Copyright (C) 2013-2014 Olivier Geffroy <jeff@jeffinfo.com>
|
||||||
* Copyright (C) 2013-2018 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
* Copyright (C) 2013-2020 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||||
* Copyright (C) 2014 Florian Henry <florian.henry@open-concept.pro>
|
* Copyright (C) 2014 Florian Henry <florian.henry@open-concept.pro>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
@ -97,6 +97,7 @@ if ($action == 'add' && $user->rights->accounting->chartofaccount)
|
|||||||
$object->account_parent = $account_parent;
|
$object->account_parent = $account_parent;
|
||||||
$object->account_category = GETPOST('account_category', 'alpha');
|
$object->account_category = GETPOST('account_category', 'alpha');
|
||||||
$object->label = GETPOST('label', 'alpha');
|
$object->label = GETPOST('label', 'alpha');
|
||||||
|
$object->labelshort = GETPOST('labelshort', 'alpha');
|
||||||
$object->active = 1;
|
$object->active = 1;
|
||||||
|
|
||||||
$res = $object->create($user);
|
$res = $object->create($user);
|
||||||
@ -162,6 +163,7 @@ if ($action == 'add' && $user->rights->accounting->chartofaccount)
|
|||||||
$object->account_parent = $account_parent;
|
$object->account_parent = $account_parent;
|
||||||
$object->account_category = GETPOST('account_category', 'alpha');
|
$object->account_category = GETPOST('account_category', 'alpha');
|
||||||
$object->label = GETPOST('label', 'alpha');
|
$object->label = GETPOST('label', 'alpha');
|
||||||
|
$object->labelshort = GETPOST('labelshort', 'alpha');
|
||||||
|
|
||||||
$result = $object->update($user);
|
$result = $object->update($user);
|
||||||
|
|
||||||
@ -215,7 +217,7 @@ if ($action == 'create') {
|
|||||||
print load_fiche_titre($langs->trans('NewAccountingAccount'));
|
print load_fiche_titre($langs->trans('NewAccountingAccount'));
|
||||||
|
|
||||||
print '<form name="add" action="'.$_SERVER["PHP_SELF"].'" method="POST">'."\n";
|
print '<form name="add" action="'.$_SERVER["PHP_SELF"].'" method="POST">'."\n";
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '<input type="hidden" name="action" value="add">';
|
print '<input type="hidden" name="action" value="add">';
|
||||||
|
|
||||||
dol_fiche_head();
|
dol_fiche_head();
|
||||||
@ -236,6 +238,10 @@ if ($action == 'create') {
|
|||||||
print '<tr><td><span class="fieldrequired">'.$langs->trans("Label").'</span></td>';
|
print '<tr><td><span class="fieldrequired">'.$langs->trans("Label").'</span></td>';
|
||||||
print '<td><input name="label" size="70" value="'.$object->label.'"></td></tr>';
|
print '<td><input name="label" size="70" value="'.$object->label.'"></td></tr>';
|
||||||
|
|
||||||
|
// Label short
|
||||||
|
print '<tr><td>' . $langs->trans("LabelToShow") . '</td>';
|
||||||
|
print '<td><input name="labelshort" size="70" value="' . $object->labelshort . '"></td></tr>';
|
||||||
|
|
||||||
// Account parent
|
// Account parent
|
||||||
print '<tr><td>'.$langs->trans("Accountparent").'</td>';
|
print '<tr><td>'.$langs->trans("Accountparent").'</td>';
|
||||||
print '<td>';
|
print '<td>';
|
||||||
@ -254,7 +260,7 @@ if ($action == 'create') {
|
|||||||
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(isset($_POST['pcg_type']) ?GETPOST('pcg_type', 'alpha') : $object->pcg_type).'">';
|
||||||
print '</td></tr>';
|
print '</td></tr>';
|
||||||
|
|
||||||
// Chart of acounts subtype
|
// Chart of accounts subtype
|
||||||
print '<tr><td>'.$langs->trans("Pcgsubtype").'</td>';
|
print '<tr><td>'.$langs->trans("Pcgsubtype").'</td>';
|
||||||
print '<td>';
|
print '<td>';
|
||||||
print '<input type="text" name="pcg_subtype" value="'.dol_escape_htmltag(isset($_POST['pcg_subtype']) ?GETPOST('pcg_subtype', 'alpha') : $object->pcg_subtype).'">';
|
print '<input type="text" name="pcg_subtype" value="'.dol_escape_htmltag(isset($_POST['pcg_subtype']) ?GETPOST('pcg_subtype', 'alpha') : $object->pcg_subtype).'">';
|
||||||
@ -286,7 +292,7 @@ elseif ($id > 0 || $ref) {
|
|||||||
dol_fiche_head($head, 'card', $langs->trans('AccountAccounting'), 0, 'billr');
|
dol_fiche_head($head, 'card', $langs->trans('AccountAccounting'), 0, 'billr');
|
||||||
|
|
||||||
print '<form name="update" action="'.$_SERVER["PHP_SELF"].'" method="POST">'."\n";
|
print '<form name="update" action="'.$_SERVER["PHP_SELF"].'" method="POST">'."\n";
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '<input type="hidden" name="action" value="edit">';
|
print '<input type="hidden" name="action" value="edit">';
|
||||||
print '<input type="hidden" name="id" value="'.$id.'">';
|
print '<input type="hidden" name="id" value="'.$id.'">';
|
||||||
print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
|
print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
|
||||||
@ -301,6 +307,10 @@ elseif ($id > 0 || $ref) {
|
|||||||
print '<tr><td><span class="fieldrequired">'.$langs->trans("Label").'</span></td>';
|
print '<tr><td><span class="fieldrequired">'.$langs->trans("Label").'</span></td>';
|
||||||
print '<td><input name="label" size="70" value="'.$object->label.'"</td></tr>';
|
print '<td><input name="label" size="70" value="'.$object->label.'"</td></tr>';
|
||||||
|
|
||||||
|
// Label short
|
||||||
|
print '<tr><td>' . $langs->trans("LabelToShow") . '</td>';
|
||||||
|
print '<td><input name="labelshort" size="70" value="' . $object->labelshort . '"</td></tr>';
|
||||||
|
|
||||||
// Account parent
|
// Account parent
|
||||||
print '<tr><td>'.$langs->trans("Accountparent").'</td>';
|
print '<tr><td>'.$langs->trans("Accountparent").'</td>';
|
||||||
print '<td>';
|
print '<td>';
|
||||||
@ -354,6 +364,10 @@ elseif ($id > 0 || $ref) {
|
|||||||
print '<tr><td class="titlefield">'.$langs->trans("Label").'</td>';
|
print '<tr><td class="titlefield">'.$langs->trans("Label").'</td>';
|
||||||
print '<td colspan="2">'.$object->label.'</td></tr>';
|
print '<td colspan="2">'.$object->label.'</td></tr>';
|
||||||
|
|
||||||
|
// Label to show
|
||||||
|
print '<tr><td class="titlefield">' . $langs->trans("LabelToShow") . '</td>';
|
||||||
|
print '<td colspan="2">' . $object->labelshort . '</td></tr>';
|
||||||
|
|
||||||
// Account parent
|
// Account parent
|
||||||
$accp = new AccountingAccount($db);
|
$accp = new AccountingAccount($db);
|
||||||
if (!empty($object->account_parent)) {
|
if (!empty($object->account_parent)) {
|
||||||
|
|||||||
@ -99,7 +99,7 @@ $linkback = '<a href="'.DOL_URL_ROOT.'/accountancy/admin/categories_list.php?res
|
|||||||
print load_fiche_titre($langs->trans('AccountingCategory'), $linkback);
|
print load_fiche_titre($langs->trans('AccountingCategory'), $linkback);
|
||||||
|
|
||||||
print '<form name="add" action="'.$_SERVER["PHP_SELF"].'" method="POST">'."\n";
|
print '<form name="add" action="'.$_SERVER["PHP_SELF"].'" method="POST">'."\n";
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '<input type="hidden" name="action" value="display">';
|
print '<input type="hidden" name="action" value="display">';
|
||||||
|
|
||||||
dol_fiche_head();
|
dol_fiche_head();
|
||||||
|
|||||||
@ -445,7 +445,7 @@ if ($id)
|
|||||||
$fieldlist = explode(',', $tabfield[$id]);
|
$fieldlist = explode(',', $tabfield[$id]);
|
||||||
|
|
||||||
print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$id.'" method="POST">';
|
print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$id.'" method="POST">';
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '<input type="hidden" name="from" value="'.dol_escape_htmltag(GETPOST('from', 'alpha')).'">';
|
print '<input type="hidden" name="from" value="'.dol_escape_htmltag(GETPOST('from', 'alpha')).'">';
|
||||||
|
|
||||||
print '<div class="div-table-responsive">';
|
print '<div class="div-table-responsive">';
|
||||||
|
|||||||
@ -154,7 +154,7 @@ print '<span class="opacitymedium">'.$langs->trans("DefaultBindingDesc").'</span
|
|||||||
print '<br>';
|
print '<br>';
|
||||||
|
|
||||||
print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">';
|
print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">';
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '<input type="hidden" name="action" value="update">';
|
print '<input type="hidden" name="action" value="update">';
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -188,7 +188,7 @@ print '})'."\n";
|
|||||||
print '</script>'."\n";
|
print '</script>'."\n";
|
||||||
|
|
||||||
print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">';
|
print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">';
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '<input type="hidden" name="action" value="update">';
|
print '<input type="hidden" name="action" value="update">';
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@ -158,7 +158,7 @@ if ($action == 'create')
|
|||||||
print load_fiche_titre($langs->trans("NewFiscalYear"));
|
print load_fiche_titre($langs->trans("NewFiscalYear"));
|
||||||
|
|
||||||
print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
|
print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '<input type="hidden" name="action" value="add">';
|
print '<input type="hidden" name="action" value="add">';
|
||||||
|
|
||||||
dol_fiche_head();
|
dol_fiche_head();
|
||||||
@ -207,7 +207,7 @@ if ($action == 'create')
|
|||||||
dol_fiche_head($head, 'card', $langs->trans("Fiscalyear"), 0, 'cron');
|
dol_fiche_head($head, 'card', $langs->trans("Fiscalyear"), 0, 'cron');
|
||||||
|
|
||||||
print '<form name="update" action="'.$_SERVER["PHP_SELF"].'" method="POST">'."\n";
|
print '<form name="update" action="'.$_SERVER["PHP_SELF"].'" method="POST">'."\n";
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '<input type="hidden" name="action" value="update">';
|
print '<input type="hidden" name="action" value="update">';
|
||||||
print '<input type="hidden" name="id" value="'.$id.'">';
|
print '<input type="hidden" name="id" value="'.$id.'">';
|
||||||
|
|
||||||
|
|||||||
@ -167,7 +167,7 @@ $linkback = '';
|
|||||||
print load_fiche_titre($langs->trans('ConfigAccountingExpert'), $linkback, 'accountancy');
|
print load_fiche_titre($langs->trans('ConfigAccountingExpert'), $linkback, 'accountancy');
|
||||||
|
|
||||||
print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">';
|
print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">';
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '<input type="hidden" name="action" value="update">';
|
print '<input type="hidden" name="action" value="update">';
|
||||||
|
|
||||||
// Default mode for calculating turnover (parameter ACCOUNTING_MODE)
|
// Default mode for calculating turnover (parameter ACCOUNTING_MODE)
|
||||||
|
|||||||
@ -408,7 +408,7 @@ if ($id)
|
|||||||
$fieldlist = explode(',', $tabfield[$id]);
|
$fieldlist = explode(',', $tabfield[$id]);
|
||||||
|
|
||||||
print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$id.'" method="POST">';
|
print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$id.'" method="POST">';
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '<input type="hidden" name="from" value="'.dol_escape_htmltag(GETPOST('from', 'alpha')).'">';
|
print '<input type="hidden" name="from" value="'.dol_escape_htmltag(GETPOST('from', 'alpha')).'">';
|
||||||
|
|
||||||
print '<div class="div-table-responsive">';
|
print '<div class="div-table-responsive">';
|
||||||
|
|||||||
@ -324,7 +324,7 @@ if ($result)
|
|||||||
|
|
||||||
print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">';
|
print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">';
|
||||||
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
|
print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
|
||||||
print '<input type="hidden" name="action" value="update">';
|
print '<input type="hidden" name="action" value="update">';
|
||||||
print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
|
print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
|
||||||
@ -383,11 +383,11 @@ if ($result)
|
|||||||
if (! empty($conf->global->ACCOUNTANCY_SHOW_PROD_DESC)) print '<td class="liste_titre"><input type="text" class="flat" size="20" name="search_desc" value="' . dol_escape_htmltag($search_desc) . '"></td>';
|
if (! empty($conf->global->ACCOUNTANCY_SHOW_PROD_DESC)) print '<td class="liste_titre"><input type="text" class="flat" size="20" name="search_desc" value="' . dol_escape_htmltag($search_desc) . '"></td>';
|
||||||
// On sell
|
// On sell
|
||||||
if ($accounting_product_mode == 'ACCOUNTANCY_SELL' || $accounting_product_mode == 'ACCOUNTANCY_SELL_INTRA' || $accounting_product_mode == 'ACCOUNTANCY_SELL_EXPORT') {
|
if ($accounting_product_mode == 'ACCOUNTANCY_SELL' || $accounting_product_mode == 'ACCOUNTANCY_SELL_INTRA' || $accounting_product_mode == 'ACCOUNTANCY_SELL_EXPORT') {
|
||||||
print '<td class="liste_titre">'.$form->selectyesno('search_onsell', $search_onsell, 1, false, 1).'</td>';
|
print '<td class="liste_titre center">'.$form->selectyesno('search_onsell', $search_onsell, 1, false, 1).'</td>';
|
||||||
}
|
}
|
||||||
// On buy
|
// On buy
|
||||||
elseif ($accounting_product_mode == 'ACCOUNTANCY_BUY') {
|
elseif ($accounting_product_mode == 'ACCOUNTANCY_BUY') {
|
||||||
print '<td class="liste_titre">'.$form->selectyesno('search_onpurchase', $search_onpurchase, 1, false, 1).'</td>';
|
print '<td class="liste_titre center">'.$form->selectyesno('search_onpurchase', $search_onpurchase, 1, false, 1).'</td>';
|
||||||
}
|
}
|
||||||
// Current account
|
// Current account
|
||||||
print '<td class="liste_titre">';
|
print '<td class="liste_titre">';
|
||||||
|
|||||||
@ -196,7 +196,7 @@ if ($action != 'export_csv')
|
|||||||
|
|
||||||
print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].'">';
|
print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].'">';
|
||||||
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
|
print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
|
||||||
print '<input type="hidden" name="action" value="list">';
|
print '<input type="hidden" name="action" value="list">';
|
||||||
print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
|
print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
|
||||||
|
|||||||
@ -347,7 +347,7 @@ if ($action == 'create')
|
|||||||
|
|
||||||
print '<form action="'.$_SERVER["PHP_SELF"].'" name="create_mvt" method="POST">';
|
print '<form action="'.$_SERVER["PHP_SELF"].'" name="create_mvt" method="POST">';
|
||||||
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '<input type="hidden" name="action" value="confirm_create">'."\n";
|
print '<input type="hidden" name="action" value="confirm_create">'."\n";
|
||||||
print '<input type="hidden" name="next_num_mvt" value="'.$next_num_mvt.'">'."\n";
|
print '<input type="hidden" name="next_num_mvt" value="'.$next_num_mvt.'">'."\n";
|
||||||
print '<input type="hidden" name="mode" value="_tmp">'."\n";
|
print '<input type="hidden" name="mode" value="_tmp">'."\n";
|
||||||
@ -444,7 +444,7 @@ if ($action == 'create')
|
|||||||
if ($action == 'editdate') {
|
if ($action == 'editdate') {
|
||||||
print '<form name="setdate" action="'.$_SERVER["PHP_SELF"].'?piece_num='.$object->piece_num.'" method="post">';
|
print '<form name="setdate" action="'.$_SERVER["PHP_SELF"].'?piece_num='.$object->piece_num.'" method="post">';
|
||||||
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '<input type="hidden" name="action" value="setdate">';
|
print '<input type="hidden" name="action" value="setdate">';
|
||||||
print '<input type="hidden" name="mode" value="'.$mode.'">';
|
print '<input type="hidden" name="mode" value="'.$mode.'">';
|
||||||
print $form->selectDate($object->doc_date ? $object->doc_date : - 1, 'doc_date', '', '', '', "setdate");
|
print $form->selectDate($object->doc_date ? $object->doc_date : - 1, 'doc_date', '', '', '', "setdate");
|
||||||
@ -468,7 +468,7 @@ if ($action == 'create')
|
|||||||
if ($action == 'editjournal') {
|
if ($action == 'editjournal') {
|
||||||
print '<form name="setjournal" action="'.$_SERVER["PHP_SELF"].'?piece_num='.$object->piece_num.'" method="post">';
|
print '<form name="setjournal" action="'.$_SERVER["PHP_SELF"].'?piece_num='.$object->piece_num.'" method="post">';
|
||||||
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '<input type="hidden" name="action" value="setjournal">';
|
print '<input type="hidden" name="action" value="setjournal">';
|
||||||
print '<input type="hidden" name="mode" value="'.$mode.'">';
|
print '<input type="hidden" name="mode" value="'.$mode.'">';
|
||||||
print $formaccounting->select_journal($object->code_journal, 'code_journal', 0, 0, array(), 1, 1);
|
print $formaccounting->select_journal($object->code_journal, 'code_journal', 0, 0, array(), 1, 1);
|
||||||
@ -492,7 +492,7 @@ if ($action == 'create')
|
|||||||
if ($action == 'editdocref') {
|
if ($action == 'editdocref') {
|
||||||
print '<form name="setdocref" action="'.$_SERVER["PHP_SELF"].'?piece_num='.$object->piece_num.'" method="post">';
|
print '<form name="setdocref" action="'.$_SERVER["PHP_SELF"].'?piece_num='.$object->piece_num.'" method="post">';
|
||||||
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '<input type="hidden" name="action" value="setdocref">';
|
print '<input type="hidden" name="action" value="setdocref">';
|
||||||
print '<input type="hidden" name="mode" value="'.$mode.'">';
|
print '<input type="hidden" name="mode" value="'.$mode.'">';
|
||||||
print '<input type="text" size="20" name="doc_ref" value="'.dol_escape_htmltag($object->doc_ref).'">';
|
print '<input type="text" size="20" name="doc_ref" value="'.dol_escape_htmltag($object->doc_ref).'">';
|
||||||
@ -588,7 +588,7 @@ if ($action == 'create')
|
|||||||
|
|
||||||
print '<form action="'.$_SERVER["PHP_SELF"].'?piece_num='.$object->piece_num.'" method="post">';
|
print '<form action="'.$_SERVER["PHP_SELF"].'?piece_num='.$object->piece_num.'" method="post">';
|
||||||
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '<input type="hidden" name="doc_date" value="'.$object->doc_date.'">'."\n";
|
print '<input type="hidden" name="doc_date" value="'.$object->doc_date.'">'."\n";
|
||||||
print '<input type="hidden" name="doc_type" value="'.$object->doc_type.'">'."\n";
|
print '<input type="hidden" name="doc_type" value="'.$object->doc_type.'">'."\n";
|
||||||
print '<input type="hidden" name="doc_ref" value="'.$object->doc_ref.'">'."\n";
|
print '<input type="hidden" name="doc_ref" value="'.$object->doc_ref.'">'."\n";
|
||||||
|
|||||||
@ -104,7 +104,6 @@ $object = new BookKeeping($db);
|
|||||||
$hookmanager->initHooks(array('bookkeepinglist'));
|
$hookmanager->initHooks(array('bookkeepinglist'));
|
||||||
|
|
||||||
$formaccounting = new FormAccounting($db);
|
$formaccounting = new FormAccounting($db);
|
||||||
$formother = new FormOther($db);
|
|
||||||
$form = new Form($db);
|
$form = new Form($db);
|
||||||
|
|
||||||
if (!in_array($action, array('export_file', 'delmouv', 'delmouvconfirm')) && !isset($_POST['begin']) && !isset($_GET['begin']) && !isset($_POST['formfilteraction']) && GETPOST('page', 'int') == '' && !GETPOST('noreset', 'int') && $user->rights->accounting->mouvements->export)
|
if (!in_array($action, array('export_file', 'delmouv', 'delmouvconfirm')) && !isset($_POST['begin']) && !isset($_GET['begin']) && !isset($_POST['formfilteraction']) && GETPOST('page', 'int') == '' && !GETPOST('noreset', 'int') && $user->rights->accounting->mouvements->export)
|
||||||
@ -211,17 +210,17 @@ 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;
|
||||||
$tmp = dol_getdate($search_date_start);
|
$tmp = dol_getdate($search_date_start);
|
||||||
$param .= '&search_date_startmonth=' . $tmp['mon'] . '&search_date_startday=' . $tmp['mday'] . '&search_date_startyear=' . $tmp['year'];
|
$param .= '&search_date_startmonth='.urlencode($tmp['mon']).'&search_date_startday='.urlencode($tmp['mday']).'&search_date_startyear='.urlencode($tmp['year']);
|
||||||
}
|
}
|
||||||
if (!empty($search_date_end)) {
|
if (!empty($search_date_end)) {
|
||||||
$filter['t.doc_date<='] = $search_date_end;
|
$filter['t.doc_date<='] = $search_date_end;
|
||||||
$tmp = dol_getdate($search_date_end);
|
$tmp = dol_getdate($search_date_end);
|
||||||
$param .= '&search_date_endmonth=' . $tmp['mon'] . '&search_date_endday=' . $tmp['mday'] . '&search_date_endyear=' . $tmp['year'];
|
$param .= '&search_date_endmonth='.urlencode($tmp['mon']).'&search_date_endday='.urlencode($tmp['mday']).'&search_date_endyear='.urlencode($tmp['year']);
|
||||||
}
|
}
|
||||||
if (!empty($search_doc_date)) {
|
if (!empty($search_doc_date)) {
|
||||||
$filter['t.doc_date'] = $search_doc_date;
|
$filter['t.doc_date'] = $search_doc_date;
|
||||||
$tmp = dol_getdate($search_doc_date);
|
$tmp = dol_getdate($search_doc_date);
|
||||||
$param .= '&doc_datemonth=' . $tmp['mon'] . '&doc_dateday=' . $tmp['mday'] . '&doc_dateyear=' . $tmp['year'];
|
$param .= '&doc_datemonth='.urlencode($tmp['mon']).'&doc_dateday='.urlencode($tmp['mday']).'&doc_dateyear='.urlencode($tmp['year']);
|
||||||
}
|
}
|
||||||
if (!empty($search_doc_type)) {
|
if (!empty($search_doc_type)) {
|
||||||
$filter['t.doc_type'] = $search_doc_type;
|
$filter['t.doc_type'] = $search_doc_type;
|
||||||
@ -274,32 +273,32 @@ if (empty($reshook))
|
|||||||
if (!empty($search_date_creation_start)) {
|
if (!empty($search_date_creation_start)) {
|
||||||
$filter['t.date_creation>='] = $search_date_creation_start;
|
$filter['t.date_creation>='] = $search_date_creation_start;
|
||||||
$tmp = dol_getdate($search_date_creation_start);
|
$tmp = dol_getdate($search_date_creation_start);
|
||||||
$param .= '&date_creation_startmonth=' . $tmp['mon'] . '&date_creation_startday=' . $tmp['mday'] . '&date_creation_startyear=' . $tmp['year'];
|
$param .= '&date_creation_startmonth=' . urlencode($tmp['mon']) . '&date_creation_startday=' . urlencode($tmp['mday']) . '&date_creation_startyear=' . urlencode($tmp['year']);
|
||||||
}
|
}
|
||||||
if (!empty($search_date_creation_end)) {
|
if (!empty($search_date_creation_end)) {
|
||||||
$filter['t.date_creation<='] = $search_date_creation_end;
|
$filter['t.date_creation<='] = $search_date_creation_end;
|
||||||
$tmp = dol_getdate($search_date_creation_end);
|
$tmp = dol_getdate($search_date_creation_end);
|
||||||
$param .= '&date_creation_endmonth=' . $tmp['mon'] . '&date_creation_endday=' . $tmp['mday'] . '&date_creation_endyear=' . $tmp['year'];
|
$param .= '&date_creation_endmonth=' .urlencode($tmp['mon']) . '&date_creation_endday=' . urlencode($tmp['mday']) . '&date_creation_endyear=' . urlencode($tmp['year']);
|
||||||
}
|
}
|
||||||
if (!empty($search_date_modification_start)) {
|
if (!empty($search_date_modification_start)) {
|
||||||
$filter['t.tms>='] = $search_date_modification_start;
|
$filter['t.tms>='] = $search_date_modification_start;
|
||||||
$tmp = dol_getdate($search_date_modification_start);
|
$tmp = dol_getdate($search_date_modification_start);
|
||||||
$param .= '&date_modification_startmonth=' . $tmp['mon'] . '&date_modification_startday=' . $tmp['mday'] . '&date_modification_startyear=' . $tmp['year'];
|
$param .= '&date_modification_startmonth=' . urlencode($tmp['mon']) . '&date_modification_startday=' . urlencode($tmp['mday']) . '&date_modification_startyear=' . urlencode($tmp['year']);
|
||||||
}
|
}
|
||||||
if (!empty($search_date_modification_end)) {
|
if (!empty($search_date_modification_end)) {
|
||||||
$filter['t.tms<='] = $search_date_modification_end;
|
$filter['t.tms<='] = $search_date_modification_end;
|
||||||
$tmp = dol_getdate($search_date_modification_end);
|
$tmp = dol_getdate($search_date_modification_end);
|
||||||
$param .= '&date_modification_endmonth=' . $tmp['mon'] . '&date_modification_endday=' . $tmp['mday'] . '&date_modification_endyear=' . $tmp['year'];
|
$param .= '&date_modification_endmonth=' . urlencode($tmp['mon']) . '&date_modification_endday=' . urlencode($tmp['mday']) . '&date_modification_endyear=' . urlencode($tmp['year']);
|
||||||
}
|
}
|
||||||
if (!empty($search_date_export_start)) {
|
if (!empty($search_date_export_start)) {
|
||||||
$filter['t.date_export>='] = $search_date_export_start;
|
$filter['t.date_export>='] = $search_date_export_start;
|
||||||
$tmp = dol_getdate($search_date_export_start);
|
$tmp = dol_getdate($search_date_export_start);
|
||||||
$param .= '&date_export_startmonth=' . $tmp['mon'] . '&date_export_startday=' . $tmp['mday'] . '&date_export_startyear=' . $tmp['year'];
|
$param .= '&date_export_startmonth=' . urlencode($tmp['mon']) . '&date_export_startday=' . urlencode($tmp['mday']) . '&date_export_startyear=' . urlencode($tmp['year']);
|
||||||
}
|
}
|
||||||
if (!empty($search_date_export_end)) {
|
if (!empty($search_date_export_end)) {
|
||||||
$filter['t.date_export<='] = $search_date_export_end;
|
$filter['t.date_export<='] = $search_date_export_end;
|
||||||
$tmp = dol_getdate($search_date_export_end);
|
$tmp = dol_getdate($search_date_export_end);
|
||||||
$param .= '&date_export_endmonth=' . $tmp['mon'] . '&date_export_endday=' . $tmp['mday'] . '&date_export_endyear=' . $tmp['year'];
|
$param .= '&date_export_endmonth=' . urlencode($tmp['mon']) . '&date_export_endday=' . urlencode($tmp['mday']) . '&date_export_endyear=' . urlencode($tmp['year']);
|
||||||
}
|
}
|
||||||
if (!empty($search_debit)) {
|
if (!empty($search_debit)) {
|
||||||
$filter['t.debit'] = $search_debit;
|
$filter['t.debit'] = $search_debit;
|
||||||
@ -330,6 +329,7 @@ if ($action == 'delbookkeeping' && $user->rights->accounting->mouvements->suppri
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($action == 'delbookkeepingyearconfirm' && $user->rights->accounting->mouvements->supprimer_tous) {
|
if ($action == 'delbookkeepingyearconfirm' && $user->rights->accounting->mouvements->supprimer_tous) {
|
||||||
|
$delmonth = GETPOST('delmonth', 'int');
|
||||||
$delyear = GETPOST('delyear', 'int');
|
$delyear = GETPOST('delyear', 'int');
|
||||||
if ($delyear == -1) {
|
if ($delyear == -1) {
|
||||||
$delyear = 0;
|
$delyear = 0;
|
||||||
@ -339,9 +339,9 @@ if ($action == 'delbookkeepingyearconfirm' && $user->rights->accounting->mouveme
|
|||||||
$deljournal = 0;
|
$deljournal = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($delyear) || !empty($deljournal))
|
if (!empty($delmonth) || !empty($delyear) || !empty($deljournal))
|
||||||
{
|
{
|
||||||
$result = $object->deleteByYearAndJournal($delyear, $deljournal);
|
$result = $object->deleteByYearAndJournal($delyear, $deljournal, '', ($delmonth > 0 ? $delmonth : 0));
|
||||||
if ($result < 0) {
|
if ($result < 0) {
|
||||||
setEventMessages($object->error, $object->errors, 'errors');
|
setEventMessages($object->error, $object->errors, 'errors');
|
||||||
}
|
}
|
||||||
@ -529,6 +529,8 @@ if ($action == 'export_file' && $user->rights->accounting->mouvements->export) {
|
|||||||
* View
|
* View
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
$formother = new FormOther($db);
|
||||||
|
|
||||||
$title_page = $langs->trans("Bookkeeping");
|
$title_page = $langs->trans("Bookkeeping");
|
||||||
|
|
||||||
// Count total nb of records
|
// Count total nb of records
|
||||||
@ -581,9 +583,20 @@ if ($action == 'delbookkeepingyear') {
|
|||||||
if (empty($delyear)) {
|
if (empty($delyear)) {
|
||||||
$delyear = dol_print_date(dol_now(), '%Y');
|
$delyear = dol_print_date(dol_now(), '%Y');
|
||||||
}
|
}
|
||||||
|
$month_array = array();
|
||||||
|
for ($i = 1; $i <= 12; $i++) {
|
||||||
|
$month_array[$i] = $langs->trans("Month".sprintf("%02d", $i));
|
||||||
|
}
|
||||||
$year_array = $formaccounting->selectyear_accountancy_bookkepping($delyear, 'delyear', 0, 'array');
|
$year_array = $formaccounting->selectyear_accountancy_bookkepping($delyear, 'delyear', 0, 'array');
|
||||||
$journal_array = $formaccounting->select_journal($deljournal, 'deljournal', '', 1, 1, 1, '', 0, 1);
|
$journal_array = $formaccounting->select_journal($deljournal, 'deljournal', '', 1, 1, 1, '', 0, 1);
|
||||||
|
|
||||||
|
$form_question['delmonth'] = array(
|
||||||
|
'name' => 'delmonth',
|
||||||
|
'type' => 'select',
|
||||||
|
'label' => $langs->trans('DelMonth'),
|
||||||
|
'values' => $month_array,
|
||||||
|
'default' => ''
|
||||||
|
);
|
||||||
$form_question['delyear'] = array(
|
$form_question['delyear'] = array(
|
||||||
'name' => 'delyear',
|
'name' => 'delyear',
|
||||||
'type' => 'select',
|
'type' => 'select',
|
||||||
@ -599,7 +612,7 @@ if ($action == 'delbookkeepingyear') {
|
|||||||
'default' => $deljournal
|
'default' => $deljournal
|
||||||
);
|
);
|
||||||
|
|
||||||
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?'.$param, $langs->trans('DeleteMvt'), $langs->trans('ConfirmDeleteMvt'), 'delbookkeepingyearconfirm', $form_question, 0, 1, 250);
|
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?'.$param, $langs->trans('DeleteMvt'), $langs->trans('ConfirmDeleteMvt'), 'delbookkeepingyearconfirm', $form_question, 0, 1, 300);
|
||||||
print $formconfirm;
|
print $formconfirm;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -608,7 +621,7 @@ if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param .= '&co
|
|||||||
if ($limit > 0 && $limit != $conf->liste_limit) $param .= '&limit='.$limit;
|
if ($limit > 0 && $limit != $conf->liste_limit) $param .= '&limit='.$limit;
|
||||||
|
|
||||||
print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].'">';
|
print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].'">';
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '<input type="hidden" name="action" value="list">';
|
print '<input type="hidden" name="action" value="list">';
|
||||||
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
||||||
print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
|
print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
|
||||||
@ -974,7 +987,7 @@ while ($i < min($num, $limit))
|
|||||||
// Exported operation date
|
// Exported operation date
|
||||||
if (!empty($arrayfields['t.date_export']['checked']))
|
if (!empty($arrayfields['t.date_export']['checked']))
|
||||||
{
|
{
|
||||||
print '<td align="center">' . dol_print_date($line->date_export, 'dayhour') . '</td>';
|
print '<td class="center">'.dol_print_date($line->date_export, 'dayhour').'</td>';
|
||||||
if (!$i) $totalarray['nbfield']++;
|
if (!$i) $totalarray['nbfield']++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -250,7 +250,7 @@ if ($action == 'delbookkeepingyear') {
|
|||||||
|
|
||||||
|
|
||||||
print '<form method="POST" id="searchFormList" action="' . $_SERVER["PHP_SELF"] . '">';
|
print '<form method="POST" id="searchFormList" action="' . $_SERVER["PHP_SELF"] . '">';
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '<input type="hidden" name="action" value="list">';
|
print '<input type="hidden" name="action" value="list">';
|
||||||
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
||||||
print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
|
print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
|
||||||
|
|||||||
@ -21,7 +21,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \file htdocs/accountancy/bookkeeping/thirdparty_lettrage_supplier.php
|
* \file htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php
|
||||||
* \ingroup Accountancy (Double entries)
|
* \ingroup Accountancy (Double entries)
|
||||||
* \brief Tab to setup lettering
|
* \brief Tab to setup lettering
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -38,7 +38,6 @@ class AccountancyCategory // extends CommonObject
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string Error string
|
* @var string Error string
|
||||||
* @see $errors
|
|
||||||
*/
|
*/
|
||||||
public $error;
|
public $error;
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
/* Copyright (C) 2013-2014 Olivier Geffroy <jeff@jeffinfo.com>
|
/* Copyright (C) 2013-2014 Olivier Geffroy <jeff@jeffinfo.com>
|
||||||
* Copyright (C) 2013-2016 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
* Copyright (C) 2013-2020 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) 2014 Juanjo Menent <jmenent@2byte.es>
|
* Copyright (C) 2014 Juanjo Menent <jmenent@2byte.es>
|
||||||
* Copyright (C) 2015 Ari Elbaz (elarifr) <github@accedinfo.com>
|
* Copyright (C) 2015 Ari Elbaz (elarifr) <github@accedinfo.com>
|
||||||
@ -120,6 +120,11 @@ class AccountingAccount extends CommonObject
|
|||||||
*/
|
*/
|
||||||
public $label;
|
public $label;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string Label short of account
|
||||||
|
*/
|
||||||
|
public $labelshort;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var int ID
|
* @var int ID
|
||||||
*/
|
*/
|
||||||
@ -162,7 +167,7 @@ class AccountingAccount extends CommonObject
|
|||||||
global $conf;
|
global $conf;
|
||||||
|
|
||||||
if ($rowid || $account_number) {
|
if ($rowid || $account_number) {
|
||||||
$sql = "SELECT a.rowid as rowid, a.datec, a.tms, a.fk_pcg_version, a.pcg_type, a.pcg_subtype, a.account_number, a.account_parent, a.label, a.fk_accounting_category, a.fk_user_author, a.fk_user_modif, a.active";
|
$sql = "SELECT a.rowid as rowid, a.datec, a.tms, a.fk_pcg_version, a.pcg_type, a.pcg_subtype, a.account_number, a.account_parent, a.label, a.labelshort, a.fk_accounting_category, a.fk_user_author, a.fk_user_modif, a.active";
|
||||||
$sql .= ", ca.label as category_label";
|
$sql .= ", ca.label as category_label";
|
||||||
$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_account as a";
|
$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_account as a";
|
||||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_accounting_category as ca ON a.fk_accounting_category = ca.rowid";
|
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."c_accounting_category as ca ON a.fk_accounting_category = ca.rowid";
|
||||||
@ -196,6 +201,7 @@ class AccountingAccount extends CommonObject
|
|||||||
$this->account_number = $obj->account_number;
|
$this->account_number = $obj->account_number;
|
||||||
$this->account_parent = $obj->account_parent;
|
$this->account_parent = $obj->account_parent;
|
||||||
$this->label = $obj->label;
|
$this->label = $obj->label;
|
||||||
|
$this->labelshort = $obj->labelshort;
|
||||||
$this->account_category = $obj->fk_accounting_category;
|
$this->account_category = $obj->fk_accounting_category;
|
||||||
$this->account_category_label = $obj->category_label;
|
$this->account_category_label = $obj->category_label;
|
||||||
$this->fk_user_author = $obj->fk_user_author;
|
$this->fk_user_author = $obj->fk_user_author;
|
||||||
@ -239,6 +245,8 @@ class AccountingAccount extends CommonObject
|
|||||||
$this->account_number = trim($this->account_number);
|
$this->account_number = trim($this->account_number);
|
||||||
if (isset($this->label))
|
if (isset($this->label))
|
||||||
$this->label = trim($this->label);
|
$this->label = trim($this->label);
|
||||||
|
if (isset($this->labelshort))
|
||||||
|
$this->labelshort = trim($this->labelshort);
|
||||||
|
|
||||||
if (empty($this->pcg_type) || $this->pcg_type == '-1')
|
if (empty($this->pcg_type) || $this->pcg_type == '-1')
|
||||||
{
|
{
|
||||||
@ -261,6 +269,7 @@ class AccountingAccount extends CommonObject
|
|||||||
$sql .= ", account_number";
|
$sql .= ", account_number";
|
||||||
$sql .= ", account_parent";
|
$sql .= ", account_parent";
|
||||||
$sql .= ", label";
|
$sql .= ", label";
|
||||||
|
$sql .= ", labelshort";
|
||||||
$sql .= ", fk_accounting_category";
|
$sql .= ", fk_accounting_category";
|
||||||
$sql .= ", fk_user_author";
|
$sql .= ", fk_user_author";
|
||||||
$sql .= ", active";
|
$sql .= ", active";
|
||||||
@ -273,6 +282,7 @@ class AccountingAccount extends CommonObject
|
|||||||
$sql .= ", " . (empty($this->account_number) ? 'NULL' : "'" . $this->db->escape($this->account_number) . "'");
|
$sql .= ", " . (empty($this->account_number) ? 'NULL' : "'" . $this->db->escape($this->account_number) . "'");
|
||||||
$sql .= ", " . (empty($this->account_parent) ? 0 : (int) $this->account_parent);
|
$sql .= ", " . (empty($this->account_parent) ? 0 : (int) $this->account_parent);
|
||||||
$sql .= ", " . (empty($this->label) ? "''" : "'" . $this->db->escape($this->label) . "'");
|
$sql .= ", " . (empty($this->label) ? "''" : "'" . $this->db->escape($this->label) . "'");
|
||||||
|
$sql .= ", " . (empty($this->labelshort) ? "''" : "'" . $this->db->escape($this->labelshort) . "'");
|
||||||
$sql .= ", " . (empty($this->account_category) ? 0 : (int) $this->account_category);
|
$sql .= ", " . (empty($this->account_category) ? 0 : (int) $this->account_category);
|
||||||
$sql .= ", " . $user->id;
|
$sql .= ", " . $user->id;
|
||||||
$sql .= ", " . (int) $this->active;
|
$sql .= ", " . (int) $this->active;
|
||||||
@ -344,6 +354,7 @@ class AccountingAccount extends CommonObject
|
|||||||
$sql .= " , account_number = '" . $this->db->escape($this->account_number) . "'";
|
$sql .= " , account_number = '" . $this->db->escape($this->account_number) . "'";
|
||||||
$sql .= " , account_parent = " . (int) $this->account_parent;
|
$sql .= " , account_parent = " . (int) $this->account_parent;
|
||||||
$sql .= " , label = " . ($this->label ? "'" . $this->db->escape($this->label) . "'" : "''");
|
$sql .= " , label = " . ($this->label ? "'" . $this->db->escape($this->label) . "'" : "''");
|
||||||
|
$sql .= " , labelshort = " . ($this->labelshort ? "'" . $this->db->escape($this->labelshort) . "'" : "''");
|
||||||
$sql .= " , fk_accounting_category = " . (empty($this->account_category) ? 0 : (int) $this->account_category);
|
$sql .= " , fk_accounting_category = " . (empty($this->account_category) ? 0 : (int) $this->account_category);
|
||||||
$sql .= " , fk_user_modif = " . $user->id;
|
$sql .= " , fk_user_modif = " . $user->id;
|
||||||
$sql .= " , active = " . (int) $this->active;
|
$sql .= " , active = " . (int) $this->active;
|
||||||
@ -461,9 +472,10 @@ class AccountingAccount extends CommonObject
|
|||||||
* @param string $moretitle Add more text to title tooltip
|
* @param string $moretitle Add more text to title tooltip
|
||||||
* @param int $notooltip 1=Disable tooltip
|
* @param int $notooltip 1=Disable tooltip
|
||||||
* @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 $withcompletelabel 0=Short label (field short label), 1=Complete label (field label)
|
||||||
* @return string String with URL
|
* @return string String with URL
|
||||||
*/
|
*/
|
||||||
public function getNomUrl($withpicto = 0, $withlabel = 0, $nourl = 0, $moretitle = '', $notooltip = 0, $save_lastsearch_value = -1)
|
public function getNomUrl($withpicto = 0, $withlabel = 0, $nourl = 0, $moretitle = '', $notooltip = 0, $save_lastsearch_value = -1, $withcompletelabel = 0)
|
||||||
{
|
{
|
||||||
global $langs, $conf, $user;
|
global $langs, $conf, $user;
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
|
||||||
@ -482,11 +494,18 @@ class AccountingAccount extends CommonObject
|
|||||||
$picto = 'billr';
|
$picto = 'billr';
|
||||||
$label='';
|
$label='';
|
||||||
|
|
||||||
|
if (empty($this->labelshort) || $withcompletelabel == 1)
|
||||||
|
{
|
||||||
|
$labeltoshow = $this->label;
|
||||||
|
} else {
|
||||||
|
$labeltoshow = $this->labelshort;
|
||||||
|
}
|
||||||
|
|
||||||
$label = '<u>' . $langs->trans("ShowAccountingAccount") . '</u>';
|
$label = '<u>' . $langs->trans("ShowAccountingAccount") . '</u>';
|
||||||
if (! empty($this->account_number))
|
if (! empty($this->account_number))
|
||||||
$label .= '<br><b>'.$langs->trans('AccountAccounting') . ':</b> ' . length_accountg($this->account_number);
|
$label .= '<br><b>'.$langs->trans('AccountAccounting') . ':</b> ' . length_accountg($this->account_number);
|
||||||
if (! empty($this->label))
|
if (! empty($labeltoshow))
|
||||||
$label .= '<br><b>'.$langs->trans('Label') . ':</b> ' . $this->label;
|
$label .= '<br><b>'.$langs->trans('Label') . ':</b> ' . $labeltoshow;
|
||||||
if ($moretitle) $label.=' - '.$moretitle;
|
if ($moretitle) $label.=' - '.$moretitle;
|
||||||
|
|
||||||
$linkclose='';
|
$linkclose='';
|
||||||
@ -513,7 +532,7 @@ class AccountingAccount extends CommonObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
$label_link = length_accountg($this->account_number);
|
$label_link = length_accountg($this->account_number);
|
||||||
if ($withlabel) $label_link .= ' - ' . $this->label;
|
if ($withlabel) $label_link .= ' - ' . $labeltoshow;
|
||||||
|
|
||||||
if ($withpicto) $result.=($linkstart.img_object(($notooltip?'':$label), $picto, ($notooltip?'':'class="classfortooltip"'), 0, 0, $notooltip?0:1).$linkend);
|
if ($withpicto) $result.=($linkstart.img_object(($notooltip?'':$label), $picto, ($notooltip?'':'class="classfortooltip"'), 0, 0, $notooltip?0:1).$linkend);
|
||||||
if ($withpicto && $withpicto != 2) $result .= ' ';
|
if ($withpicto && $withpicto != 2) $result .= ' ';
|
||||||
|
|||||||
@ -361,20 +361,20 @@ class BookKeeping extends CommonObject
|
|||||||
$sql .= ", '".$this->db->escape($this->doc_ref)."'";
|
$sql .= ", '".$this->db->escape($this->doc_ref)."'";
|
||||||
$sql .= ", ".$this->fk_doc;
|
$sql .= ", ".$this->fk_doc;
|
||||||
$sql .= ", ".$this->fk_docdet;
|
$sql .= ", ".$this->fk_docdet;
|
||||||
$sql .= ",'".$this->db->escape($this->thirdparty_code)."'";
|
$sql .= ", ".(!empty($this->thirdparty_code)?("'".$this->db->escape($this->thirdparty_code)."'"):"NULL");
|
||||||
$sql .= ",'".$this->db->escape($this->subledger_account)."'";
|
$sql .= ", ".(!empty($this->subledger_account)?("'".$this->db->escape($this->subledger_account)."'"):"NULL");
|
||||||
$sql .= ",'".$this->db->escape($this->subledger_label)."'";
|
$sql .= ", ".(!empty($this->subledger_label)?("'".$this->db->escape($this->subledger_label)."'"):"NULL");
|
||||||
$sql .= ", '".$this->db->escape($this->numero_compte)."'";
|
$sql .= ", '".$this->db->escape($this->numero_compte)."'";
|
||||||
$sql .= ",'".$this->db->escape($this->label_compte)."'";
|
$sql .= ", ".(!empty($this->label_operation)?("'".$this->db->escape($this->label_operation)."'"):"NULL");
|
||||||
$sql .= ", '".$this->db->escape($this->label_operation)."'";
|
$sql .= ", '".$this->db->escape($this->label_operation)."'";
|
||||||
$sql .= ", ".$this->debit;
|
$sql .= ", ".$this->debit;
|
||||||
$sql .= ", ".$this->credit;
|
$sql .= ", ".$this->credit;
|
||||||
$sql .= ", ".$this->montant;
|
$sql .= ", ".$this->montant;
|
||||||
$sql .= ",'".$this->db->escape($this->sens)."'";
|
$sql .= ", ".(!empty($this->sens)?("'".$this->db->escape($this->sens)."'"):"NULL");
|
||||||
$sql .= ", '".$this->db->escape($this->fk_user_author)."'";
|
$sql .= ", '".$this->db->escape($this->fk_user_author)."'";
|
||||||
$sql .= ", '".$this->db->idate($now)."'";
|
$sql .= ", '".$this->db->idate($now)."'";
|
||||||
$sql .= ", '".$this->db->escape($this->code_journal)."'";
|
$sql .= ", '".$this->db->escape($this->code_journal)."'";
|
||||||
$sql .= ",'".$this->db->escape($this->journal_label)."'";
|
$sql .= ", ".(!empty($this->journal_label)?("'".$this->db->escape($this->journal_label)."'"):"NULL");
|
||||||
$sql .= ", ".$this->db->escape($this->piece_num);
|
$sql .= ", ".$this->db->escape($this->piece_num);
|
||||||
$sql .= ", ".(!isset($this->entity) ? $conf->entity : $this->entity);
|
$sql .= ", ".(!isset($this->entity) ? $conf->entity : $this->entity);
|
||||||
$sql .= ")";
|
$sql .= ")";
|
||||||
@ -1366,29 +1366,39 @@ class BookKeeping extends CommonObject
|
|||||||
/**
|
/**
|
||||||
* Delete bookkeeping by year
|
* Delete bookkeeping by year
|
||||||
*
|
*
|
||||||
* @param string $delyear Year to delete
|
* @param int $delyear Year to delete
|
||||||
* @param string $journal Journal to delete
|
* @param string $journal Journal to delete
|
||||||
* @param string $mode Mode
|
* @param string $mode Mode
|
||||||
|
* @param int $delmonth Month
|
||||||
* @return int <0 if KO, >0 if OK
|
* @return int <0 if KO, >0 if OK
|
||||||
*/
|
*/
|
||||||
public function deleteByYearAndJournal($delyear = '', $journal = '', $mode = '')
|
public function deleteByYearAndJournal($delyear = 0, $journal = '', $mode = '', $delmonth = 0)
|
||||||
{
|
{
|
||||||
global $conf;
|
global $langs;
|
||||||
|
|
||||||
if (empty($delyear) && empty($journal))
|
if (empty($delyear) && empty($journal))
|
||||||
{
|
{
|
||||||
|
$this->error = 'ErrorOneFieldRequired';
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
if (!empty($delmonth) && empty($delyear))
|
||||||
|
{
|
||||||
|
$this->error = 'YearRequiredIfMonthDefined';
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
|
||||||
$this->db->begin();
|
$this->db->begin();
|
||||||
|
|
||||||
// first check if line not yet in bookkeeping
|
// Delete record in bookkeeping
|
||||||
$sql = "DELETE";
|
$sql = "DELETE";
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX.$this->table_element.$mode;
|
$sql .= " FROM ".MAIN_DB_PREFIX.$this->table_element.$mode;
|
||||||
$sql .= " WHERE 1 = 1";
|
$sql .= " WHERE 1 = 1";
|
||||||
if (!empty($delyear)) $sql .= " AND YEAR(doc_date) = ".$delyear; // FIXME Must use between
|
$sql.= dolSqlDateFilter('doc_date', 0, $delmonth, $delyear);
|
||||||
if (!empty($journal)) $sql .= " AND code_journal = '".$this->db->escape($journal)."'";
|
if (!empty($journal)) $sql .= " AND code_journal = '".$this->db->escape($journal)."'";
|
||||||
$sql .= " AND entity IN (".getEntity('accountancy').")";
|
$sql .= " AND entity IN (".getEntity('accountancy').")";
|
||||||
|
|
||||||
|
// TODO: In a future we must forbid deletion if record is inside a closed fiscal period.
|
||||||
|
|
||||||
$resql = $this->db->query($sql);
|
$resql = $this->db->query($sql);
|
||||||
|
|
||||||
if (!$resql) {
|
if (!$resql) {
|
||||||
|
|||||||
@ -115,11 +115,11 @@ if (!empty($id)) {
|
|||||||
$objp = $db->fetch_object($result);
|
$objp = $db->fetch_object($result);
|
||||||
|
|
||||||
print '<form action="'.$_SERVER["PHP_SELF"].'?id='.$id.'" method="post">'."\n";
|
print '<form action="'.$_SERVER["PHP_SELF"].'?id='.$id.'" method="post">'."\n";
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '<input type="hidden" name="action" value="ventil">';
|
print '<input type="hidden" name="action" value="ventil">';
|
||||||
print '<input type="hidden" name="backtopage" value="'.dol_escape_htmltag($backtopage).'">';
|
print '<input type="hidden" name="backtopage" value="'.dol_escape_htmltag($backtopage).'">';
|
||||||
|
|
||||||
print load_fiche_titre($langs->trans('CustomersVentilation'), '', 'title_setup');
|
print load_fiche_titre($langs->trans('CustomersVentilation'), '', 'title_accountancy');
|
||||||
|
|
||||||
dol_fiche_head();
|
dol_fiche_head();
|
||||||
|
|
||||||
|
|||||||
@ -212,8 +212,8 @@ $textnextyear = ' <a href="'.$_SERVER["PHP_SELF"].'?year='.($year_current +
|
|||||||
|
|
||||||
print load_fiche_titre($langs->trans("CustomersVentilation")." ".$textprevyear." ".$langs->trans("Year")." ".$year_start." ".$textnextyear, '', 'title_accountancy');
|
print load_fiche_titre($langs->trans("CustomersVentilation")." ".$textprevyear." ".$langs->trans("Year")." ".$year_start." ".$textnextyear, '', 'title_accountancy');
|
||||||
|
|
||||||
print '<span class="opacitymedium">'.$langs->trans("DescVentilCustomer").'<br>';
|
print '<span class="opacitymedium">'.$langs->trans("DescVentilCustomer").'</span><br>';
|
||||||
print $langs->trans("DescVentilMore", $langs->transnoentitiesnoconv("ValidateHistory"), $langs->transnoentitiesnoconv("ToBind")).'<br>';
|
print '<span class="opacitymedium hideonsmartphone">'.$langs->trans("DescVentilMore", $langs->transnoentitiesnoconv("ValidateHistory"), $langs->transnoentitiesnoconv("ToBind")).'<br>';
|
||||||
print '</span><br>';
|
print '</span><br>';
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -37,6 +37,8 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
|
|||||||
// Load translation files required by the page
|
// Load translation files required by the page
|
||||||
$langs->loadLangs(array("bills", "compta", "accountancy", "productbatch"));
|
$langs->loadLangs(array("bills", "compta", "accountancy", "productbatch"));
|
||||||
|
|
||||||
|
$optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print')
|
||||||
|
|
||||||
$account_parent = GETPOST('account_parent');
|
$account_parent = GETPOST('account_parent');
|
||||||
$changeaccount = GETPOST('changeaccount');
|
$changeaccount = GETPOST('changeaccount');
|
||||||
// Search Getpost
|
// Search Getpost
|
||||||
@ -275,7 +277,7 @@ if ($result) {
|
|||||||
print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">'."\n";
|
print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">'."\n";
|
||||||
print '<input type="hidden" name="action" value="ventil">';
|
print '<input type="hidden" name="action" value="ventil">';
|
||||||
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
|
print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
|
||||||
print '<input type="hidden" name="sortfield" value="'.$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.'">';
|
||||||
@ -389,7 +391,7 @@ if ($result) {
|
|||||||
print '<td>'.$objp->tva_intra.'</td>';
|
print '<td>'.$objp->tva_intra.'</td>';
|
||||||
|
|
||||||
print '<td class="center">';
|
print '<td class="center">';
|
||||||
print $codecompta.' <a href="./card.php?id='.$objp->rowid.'&backtopage='.urlencode($_SERVER["PHP_SELF"].($param ? '?'.$param : '')).'">';
|
print $codecompta.' <a class="editfielda" href="./card.php?id='.$objp->rowid.'&backtopage='.urlencode($_SERVER["PHP_SELF"].($param ? '?'.$param : '')).'">';
|
||||||
print img_edit();
|
print img_edit();
|
||||||
print '</a>';
|
print '</a>';
|
||||||
print '</td>';
|
print '</td>';
|
||||||
|
|||||||
@ -37,7 +37,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
|||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
|
||||||
|
|
||||||
// Load translation files required by the page
|
// Load translation files required by the page
|
||||||
$langs->loadLangs(array("bills", "compta", "accountancy", "other", "productbatch"));
|
$langs->loadLangs(array("bills", "companies", "compta", "accountancy", "other", "productbatch"));
|
||||||
|
|
||||||
$action = GETPOST('action', 'alpha');
|
$action = GETPOST('action', 'alpha');
|
||||||
$massaction = GETPOST('massaction', 'alpha');
|
$massaction = GETPOST('massaction', 'alpha');
|
||||||
@ -336,7 +336,7 @@ if ($result) {
|
|||||||
print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">'."\n";
|
print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">'."\n";
|
||||||
print '<input type="hidden" name="action" value="ventil">';
|
print '<input type="hidden" name="action" value="ventil">';
|
||||||
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
|
print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
|
||||||
print '<input type="hidden" name="sortfield" value="'.$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.'">';
|
||||||
@ -363,7 +363,7 @@ if ($result) {
|
|||||||
print '<tr class="liste_titre_filter">';
|
print '<tr class="liste_titre_filter">';
|
||||||
print '<td class="liste_titre"><input type="text" class="flat maxwidth25" name="search_lineid" value="'.dol_escape_htmltag($search_lineid).'""></td>';
|
print '<td class="liste_titre"><input type="text" class="flat maxwidth25" name="search_lineid" value="'.dol_escape_htmltag($search_lineid).'""></td>';
|
||||||
print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_invoice" value="'.dol_escape_htmltag($search_invoice).'"></td>';
|
print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_invoice" value="'.dol_escape_htmltag($search_invoice).'"></td>';
|
||||||
print '<td class="liste_titre center nowraponall">';
|
print '<td class="liste_titre center nowraponall minwidth100imp">';
|
||||||
if (!empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) {
|
if (!empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) {
|
||||||
print '<input class="flat valignmiddle maxwidth25" type="text" maxlength="2" name="search_day" value="'.$search_day.'">';
|
print '<input class="flat valignmiddle maxwidth25" type="text" maxlength="2" name="search_day" value="'.$search_day.'">';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -117,11 +117,11 @@ if (!empty($id)) {
|
|||||||
$objp = $db->fetch_object($result);
|
$objp = $db->fetch_object($result);
|
||||||
|
|
||||||
print '<form action="'.$_SERVER["PHP_SELF"].'?id='.$id.'" method="post">'."\n";
|
print '<form action="'.$_SERVER["PHP_SELF"].'?id='.$id.'" method="post">'."\n";
|
||||||
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '<input type="hidden" name="action" value="ventil">';
|
print '<input type="hidden" name="action" value="ventil">';
|
||||||
print '<input type="hidden" name="backtopage" value="'.dol_escape_htmltag($backtopage).'">';
|
print '<input type="hidden" name="backtopage" value="'.dol_escape_htmltag($backtopage).'">';
|
||||||
|
|
||||||
print load_fiche_titre($langs->trans('ExpenseReportsVentilation'), '', 'title_setup');
|
print load_fiche_titre($langs->trans('ExpenseReportsVentilation'), '', 'title_accountancy');
|
||||||
|
|
||||||
dol_fiche_head();
|
dol_fiche_head();
|
||||||
|
|
||||||
|
|||||||
@ -138,8 +138,8 @@ $textnextyear = ' <a href="'.$_SERVER["PHP_SELF"].'?year='.($year_current +
|
|||||||
|
|
||||||
print load_fiche_titre($langs->trans("ExpenseReportsVentilation")." ".$textprevyear." ".$langs->trans("Year")." ".$year_start." ".$textnextyear, '', 'title_accountancy');
|
print load_fiche_titre($langs->trans("ExpenseReportsVentilation")." ".$textprevyear." ".$langs->trans("Year")." ".$year_start." ".$textnextyear, '', 'title_accountancy');
|
||||||
|
|
||||||
print '<span class="opacitymedium">'.$langs->trans("DescVentilExpenseReport").'<br>';
|
print '<span class="opacitymedium">'.$langs->trans("DescVentilExpenseReport").'</span><br>';
|
||||||
print $langs->trans("DescVentilExpenseReportMore", $langs->transnoentitiesnoconv("ValidateHistory"), $langs->transnoentitiesnoconv("ToBind")).'<br>';
|
print '<span class="opacitymedium hideonsmartphone">'.$langs->trans("DescVentilExpenseReportMore", $langs->transnoentitiesnoconv("ValidateHistory"), $langs->transnoentitiesnoconv("ToBind")).'<br>';
|
||||||
print '</span><br>';
|
print '</span><br>';
|
||||||
|
|
||||||
|
|
||||||
|
|||||||