2
0
forked from Wavyzz/dolibarr

Compare commits

...

478 Commits
5.0.4 ... 5.0

Author SHA1 Message Date
Laurent Destailleur
474260e526 Merge pull request #13447 from c3do/patch-1
Fix can set desiredstock to (int) 0 from API Rest
2020-03-30 19:46:02 +02:00
Cédric
eead9a93d3 Fix can set desiredstock to (int) 0 from API Rest
When you set desiredstock to 0 as an integer from the API, it registers to null in the database. Using is_numeric() fixes this.
2020-03-30 13:03:13 +02:00
Laurent Destailleur
ef00cb0736 Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 5.0
Conflicts:
	htdocs/fourn/class/fournisseur.commande.class.php
2020-01-10 19:44:52 +01:00
Laurent Destailleur
d7f7f5bf3d Merge branch '3.9' of git@github.com:Dolibarr/dolibarr.git into 4.0 2020-01-10 19:42:34 +01:00
Laurent Destailleur
7c0a6946a7 Merge branch '3.8' of git@github.com:Dolibarr/dolibarr.git into 3.9 2020-01-10 19:42:15 +01:00
Laurent Destailleur
1ecc1afa9e Merge branch '3.7' of git@github.com:Dolibarr/dolibarr.git into 3.8 2020-01-10 19:41:49 +01:00
Laurent Destailleur
ceb1e699b7 Merge branch '3.6' of git@github.com:Dolibarr/dolibarr.git into 3.7 2020-01-10 19:37:16 +01:00
Laurent Destailleur
c028819cab FIX clone of purchase order 2020-01-10 19:35:49 +01:00
Laurent Destailleur
d59b1bb0c6 Merge 2018-11-23 11:44:07 +01:00
Laurent Destailleur
9d582a53ca Fix compatibility with new mysql versions 2018-11-23 11:28:28 +01:00
Laurent Destailleur
24c499aa44 Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2018-11-10 15:48:53 +01:00
Laurent Destailleur
8eac45a762 Merge branch '3.9' of git@github.com:Dolibarr/dolibarr.git into 4.0 2018-11-10 15:48:07 +01:00
Laurent Destailleur
3d85407619 Merge branch '3.8' of git@github.com:Dolibarr/dolibarr.git into 3.9 2018-11-10 15:46:31 +01:00
Laurent Destailleur
ca1e3b4d55 Merge branch '3.7' of git@github.com:Dolibarr/dolibarr.git into 3.8 2018-11-10 15:15:33 +01:00
Laurent Destailleur
94bb1ac511 Merge branch '3.6' of git@github.com:Dolibarr/dolibarr.git into 3.7 2018-11-10 12:49:22 +01:00
Laurent Destailleur
8893d8d59f Fix compatiblity with new version of PHP 2018-11-10 11:56:23 +01:00
Laurent Destailleur
b9c95a5a5c Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2018-09-02 14:19:43 +02:00
Laurent Destailleur
5bab9d59b2 Fix var_dump 2018-09-02 14:19:23 +02:00
Laurent Destailleur
37fb70d983 Merge branch '5.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2018-09-02 14:15:32 +02:00
Laurent Destailleur
02bedc49d3 Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 5.0
Conflicts:
	test/phpunit/PricesTest.php
	test/phpunit/RestAPIUserTest.php
	test/phpunit/WebservicesInvoicesTest.php
2018-09-02 14:15:17 +02:00
Laurent Destailleur
e41b55af13 Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 4.0 2018-09-02 14:10:28 +02:00
Laurent Destailleur
a69c3caf2c Prepare compatibility with phpunit 6.1 2018-09-02 14:10:06 +02:00
Laurent Destailleur
b96082a577 Merge pull request #9274 from frederic34/patch-17
Build badge for 5.0
2018-08-28 01:38:06 +02:00
Frédéric FRANCE
b1a3238c94 Build badge for 5.0 2018-08-21 14:22:29 +02:00
Laurent Destailleur
e03d7eba8c Merge pull request #9254 from frederic34/patch-17
Build Badge by branch
2018-08-21 12:48:23 +02:00
Frédéric FRANCE
2aa0956f15 Update README.md 2018-08-16 16:08:04 +02:00
Frédéric FRANCE
bb09bcece4 Update README.md 2018-08-16 16:03:56 +02:00
Laurent Destailleur
97b1589fb5 Merge pull request #9082 from ATM-Marc/FIX_5.0_propal_projectFromOrigin
FIX: propal: correctly preset project when creating with origin/originid
2018-07-10 10:42:10 +02:00
Marc de Lima Lucio
2ba7c07574 FIX: propal: correctly preset project when creating with origin/originid 2018-07-09 17:34:31 +02:00
Laurent Destailleur
8785d69548 Do not load database handler 2018-06-05 18:21:56 +02:00
Laurent Destailleur
2e2cc55350 Backport fix of file checker generation 2018-05-29 12:15:28 +02:00
Laurent Destailleur
f2cfb928e8 Merge pull request #8809 from simnandez/5.0
Fix: extrafiels is not passing orders to invoice
2018-05-18 11:47:27 +02:00
Juanjo Menent
dd259043cd Fix: Cashdesk does not apply multi-price or price per customer 2018-05-18 09:20:18 +02:00
Juanjo Menent
dc7a1610e7 Fix: extrafiels is not passing orders to invoice 2018-05-17 18:56:01 +02:00
Laurent Destailleur
842c6168a2 FIX #8762 2018-05-10 11:50:35 +02:00
Laurent Destailleur
82708705c7 Merge pull request #8701 from Dolibarr/revert-8354-5.0_multicurrency_objectline_print
Revert "No display object line curreny if not necessary"
2018-05-01 11:17:59 +02:00
Laurent Destailleur
d975dd507b Revert "No display object line curreny if not necessary" 2018-05-01 11:17:47 +02:00
Laurent Destailleur
b1f1ddc6d0 Merge pull request #8354 from tuxgasy/5.0_multicurrency_objectline_print
No display object line curreny if not necessary
2018-05-01 11:15:31 +02:00
Laurent Destailleur
e18190565c Merge pull request #8683 from ATM-Marc/FIX_export_actioncomm
FIX: actioncomm export: type filtering not working
2018-04-27 11:38:59 +02:00
Marc de Lima Lucio
c044d9ab58 FIX: actioncomm export: type filtering not working 2018-04-25 16:20:09 +02:00
Laurent Destailleur
1870598734 Merge pull request #8627 from hregis/5.0_bug
Fix: syntax error for postgresql > 9.1
2018-04-17 18:51:55 +02:00
Regis Houssin
9a210c1a91 Fix: syntax error for postgresql > 9.1 2018-04-17 17:33:40 +02:00
Laurent Destailleur
6b3c17680f Merge pull request #8596 from simnandez/5.0
FIX: some localtaxes errors
2018-04-15 11:25:27 +02:00
Juanjo Menent
bfed1b9db1 FIX: some localtaxes errors 2018-04-14 12:45:40 +02:00
Laurent Destailleur
ecdb56606d Merge pull request #8590 from atm-greg/FIX_supplier_invoice_line_rank
Rank of invoice_supplier lines was always -1
2018-04-13 23:20:42 +02:00
atm-greg
4fae1e3236 rank of invoice_supplier lines was always -1 2018-04-13 17:01:10 +02:00
Laurent Destailleur
7d5c3a5c4f Merge pull request #8426 from atm-ph/fix_5.0_files_lost_on_contract
Fix documents are lost if we rename contrat ref
2018-03-21 20:40:23 +01:00
atm-ph
2094c48b7f Fix missing folder with multientity 2018-03-21 12:14:04 +01:00
atm-ph
cad7bdc74b Fix documents are lost if we rename contrat ref 2018-03-21 11:54:25 +01:00
TuxGasy
34145ed443 Do not display multicurrency cols if currency of object is same as main currency 2018-03-11 21:58:32 +01:00
Laurent Destailleur
faef7a2e0c Merge pull request #8324 from atm-maxime/fix_unit_replen
Fix unit in replenish #7225
2018-03-10 12:58:16 +01:00
Maxime Kohlhaas
fd36ade61a Fix unit in replenish #7225 2018-03-10 11:20:32 +01:00
Laurent Destailleur
1d571c4159 Merge pull request #8315 from tuxgasy/5.0_invoice_supplier_multicurrency
Fix bug when updating multi currency rate on invoice supplier
2018-03-09 22:49:50 +01:00
TuxGasy
9eeb80151e Fix bug when updating multi currency rate on invoice supplier 2018-03-09 21:13:54 +01:00
Laurent Destailleur
4caefbe926 Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2018-03-07 12:59:52 +01:00
Laurent Destailleur
94de6efa4b Merge pull request #8291 from ATM-Marc/FIX_order_export_date_livraison
FIX: add planned delivery to order exports
2018-03-07 12:59:32 +01:00
Marc de Lima Lucio
dd208348c4 FIX: add planned delivery to order exports 2018-03-07 12:18:08 +01:00
Laurent Destailleur
aab0a33f40 Merge pull request #8251 from atm-gauthier/5.0_fix_last_situation
FIX : if we make a mistake with situation_percent, now we can correct…
2018-03-02 17:54:20 +01:00
gauthier
4d05bff780 FIX : if we make a mistake with situation_percent, now we can correct it. before situation_final was always set to 1 and no way to go back 2018-02-27 12:27:25 +01:00
Laurent Destailleur
9690e68bfb Merge pull request #8206 from fmarcet/5.0
Fix: Barcode type on massive init
2018-02-20 15:07:53 +01:00
Laurent Destailleur
a698ba0b56 Merge pull request #8205 from steschuser/5.0
FIX: #8139 User search does not work if MAIN_USE_OLD_SEARCH_FORM, missing list.php
2018-02-20 14:59:20 +01:00
Ferran Marcet
671b4a399d Fix: Barcode type 2018-02-19 17:47:24 +01:00
Ferran Marcet
2e1727e323 Fix: Barcode type 2018-02-19 17:45:19 +01:00
Ferran Marcet
5535daf84a Merge branch '5.0up' into 5.0 2018-02-19 17:43:14 +01:00
sschwebel
7c583227fb FIX: #8139 2018-02-19 10:58:05 +01:00
Laurent Destailleur
94a76a1393 Merge pull request #8180 from atm-maxime/fix_service_list
Fix : contract service list context was mixing up with service list from product/service module
2018-02-14 20:43:03 +01:00
Maxime Kohlhaas
ef05171641 Fix : contract service list context was mixing up with service list from product/service module 2018-02-12 13:48:43 +01:00
Laurent Destailleur
c4277c1e54 Merge pull request #8128 from hregis/5.0_bug
Fix: remove lines with special code when convert to reduc
2018-02-04 12:17:54 +01:00
Regis Houssin
d5b7184c8d Fix: wrong test 2018-02-04 09:04:15 +01:00
Regis Houssin
a161ca37ff Fix: use product_type instead special_code 2018-02-04 08:58:31 +01:00
Regis Houssin
2147bd23e6 Fix: remove lines with special code when convert to reduc 2018-02-02 10:22:47 +01:00
Laurent Destailleur
47d0b6583e Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2018-01-26 01:40:04 +01:00
Laurent Destailleur
c0e719e3d8 Fix package scripts 2018-01-26 01:39:42 +01:00
Laurent Destailleur
adb70e0456 Merge pull request #8086 from atm-ph/fix_5.0_align_payment_total
Fix each total isn't aligned on payment card
2018-01-24 11:14:43 +01:00
atm-ph
054d98a2ba Fix each total isn't aligned on payment card 2018-01-22 17:09:17 +01:00
Laurent Destailleur
1420149b95 Merge pull request #8069 from atm-maxime/fix_contrat_validate
Fix validate contrat was not using force_number parameter
2018-01-20 12:33:50 +01:00
Maxime Kohlhaas
4c0dc21ca0 Fix validate contrat was not using force_number parameter 2018-01-18 14:07:32 +01:00
Laurent Destailleur
58589b8454 Merge branch '5.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2018-01-11 00:55:10 +01:00
Laurent Destailleur
387dd967e2 Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2018-01-11 00:55:00 +01:00
Laurent Destailleur
5adeaf9d76 Merge branch '3.9' of git@github.com:Dolibarr/dolibarr.git into 4.0 2018-01-11 00:54:30 +01:00
Laurent Destailleur
df22a311c2 Merge pull request #8030 from steschuser/5.0
FIX #8029 Unable to make leave request in holyday module
2018-01-11 00:32:45 +01:00
Laurent Destailleur
9253fed754 Revert "Code comment"
This reverts commit 8000777864.
2018-01-11 00:17:32 +01:00
Laurent Destailleur
8000777864 Code comment 2018-01-10 20:43:56 +01:00
Ferran Marcet
7ce7c0d5e5 Merge branch '5.0up' into 5.0 2018-01-10 16:12:53 +01:00
sschwebel
7e8fda2d71 FIX #8029 Unable to make leave request in holyday module
wrong variable name in card.php
2018-01-05 12:09:45 +01:00
Laurent Destailleur
0db03cfbcc Merge pull request #7957 from frederic34/patch-1
Update product.php
2017-12-16 01:08:30 +01:00
Frédéric FRANCE
ab558ee5fa Update product.php 2017-12-14 09:49:55 +01:00
Laurent Destailleur
fd85088a6c Merge branch '5.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-12-10 21:27:03 +01:00
Laurent Destailleur
1d9d8980a9 Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-12-10 21:16:49 +01:00
Laurent Destailleur
3a181a5d28 Merge pull request #7936 from atm-maxime/5.0
Fix event late alert on third event list #7912
2017-12-10 20:58:32 +01:00
Laurent Destailleur
e4725f4248 FIX #7933 2017-12-10 20:55:51 +01:00
Maxime Kohlhaas
3db4d10fc0 Fix event late alert on third event list #7912 2017-12-10 08:12:49 +01:00
Laurent Destailleur
8a5c53550b Merge branch '5.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-12-08 12:43:53 +01:00
Laurent Destailleur
049a038f56 Merge pull request #7925 from hregis/5.0_bug
Fix: wrong translation if multilang activated
2017-12-08 12:43:37 +01:00
Laurent Destailleur
e526162e8e Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-12-08 12:42:22 +01:00
Regis Houssin
1b16eb731d Fix: missing load product translation file 2017-12-08 11:00:23 +01:00
Regis Houssin
1bdffa961f Fix: wrong translation if multilang activated 2017-12-08 10:41:14 +01:00
Laurent Destailleur
6de3a40546 Merge pull request #7916 from atm-ph/fix_4.0_require_class
Fix include class WorkboardResponse
2017-12-08 10:40:26 +01:00
atm-ph
c90ece1188 Fix include class WorkboardResponse 2017-12-06 14:22:37 +01:00
Laurent Destailleur
29568287ef Merge branch '5.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-12-02 14:13:44 +01:00
Laurent Destailleur
5fae19b4d6 Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-12-02 14:13:29 +01:00
Laurent Destailleur
c7d0e917fb Merge branch '3.9' of git@github.com:Dolibarr/dolibarr.git into 4.0 2017-12-02 14:12:43 +01:00
Laurent Destailleur
9cafb08759 Merge pull request #7853 from atm-ph/fix_5.0_invoice_updateline_calcul_price_total
Fix product type is ignored and can generate a diffrent result with s…
2017-12-02 14:06:25 +01:00
Laurent Destailleur
5308acdcde Merge pull request #7895 from atm-alexis/FIX_add_line_bad_price_and_ref
FIX add line bad price and ref
2017-12-01 16:03:21 +01:00
Alexis ALGOUD
b2effa7cc8 fix travis 2017-11-30 11:36:35 +01:00
root
b7f26ea788 FIX add line bad price and ref 2017-11-30 11:10:01 +01:00
Laurent Destailleur
d2135fd139 Merge pull request #7888 from atm-gauthier/5.0_fix_where_fk_status
FIX : test for filter fk_status
2017-11-29 15:32:51 +01:00
gauthier
f04af6c1b3 FIX : test for filter fk_status 2017-11-29 11:06:33 +01:00
atm-ph
5fef6478a5 Fix wrong calcul_price_total() update 2017-11-27 11:26:41 +01:00
atm-ph
219e58d0e4 Fix product type is ignored and can generate a diffrent result with situation invoice 2017-11-22 12:15:02 +01:00
Laurent Destailleur
356f36c5bf Merge pull request #7851 from atm-gauthier/5.0_backport_feature
Fix: some problems with medias in multicompany (backport 6.0 commit 762b4eb876)
2017-11-22 11:58:09 +01:00
Regis Houssin
a9bfe0f48f Fix: some problems with medias in multicompany (backport 6.0 commit 762b4eb876) 2017-11-22 10:12:51 +01:00
Laurent Destailleur
c3c14277e1 Merge 2017-11-17 14:15:07 +01:00
Laurent Destailleur
42b7d80567 FIX #7824
Conflicts:
	htdocs/product/stock/replenishorders.php
2017-11-17 14:12:53 +01:00
Laurent Destailleur
fde33594a2 FIX #7824 2017-11-17 14:06:08 +01:00
Laurent Destailleur
7f28c9fff6 FIX #7824
Conflicts:
	htdocs/product/stock/replenishorders.php
2017-11-17 14:01:21 +01:00
Ferran Marcet
7f1adc6a6a FIX: Saving wrong localtax on order addline 2017-11-07 09:46:39 +01:00
Laurent Destailleur
7d4b43f368 Merge pull request #7757 from atm-maxime/fix_search_product
Fix display of product/service list
2017-11-05 18:29:24 +01:00
Maxime Kohlhaas
13667e4850 Fix display of product/service list 2017-11-03 08:56:23 +01:00
Laurent Destailleur
141df52dd6 Merge pull request #7741 from frederic34/patch-1
swap llxfooter() and $db->close()
2017-11-02 09:53:06 +01:00
Frédéric FRANCE
01a3787664 swap llxfooter() and $db->close() 2017-10-31 13:45:13 +01:00
Laurent Destailleur
777d2f7027 Prepare 5.0.8 2017-10-29 16:17:36 +01:00
Laurent Destailleur
0b271cca46 Prepare 5.0.7 2017-10-29 10:38:57 +01:00
Laurent Destailleur
02f47b5a91 Merge branch '5.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-10-28 22:03:23 +02:00
Laurent Destailleur
4feecbeab8 Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-10-28 22:03:06 +02:00
Laurent Destailleur
0630542e20 Merge pull request #7723 from atm-maxime/fix_contract_desc
Fix : contract lines from origin were containing all lines desc
2017-10-28 22:02:13 +02:00
Laurent Destailleur
783efd1a71 Merge pull request #7722 from fmarcet/4.0
FIX: paid supplier invoices are shown as abandoned
2017-10-28 22:01:30 +02:00
Maxime Kohlhaas
7c1d6251f7 Fix : contract lines from origin were containing all lines desc 2017-10-27 13:27:38 +02:00
Ferran Marcet
9178d80349 Merge remote-tracking branch 'origin/4.0' into 4.0 2017-10-27 11:52:15 +02:00
Ferran Marcet
bc8127d685 Fix: paid supplier invoices are shown as abandoned on the consumption card. 2017-10-27 11:52:05 +02:00
Laurent Destailleur
8e18d5906d Merge branch '5.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-10-27 02:32:28 +02:00
Laurent Destailleur
f02e731c67 Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 5.0
Conflicts:
	htdocs/core/lib/project.lib.php
2017-10-27 02:32:09 +02:00
Laurent Destailleur
9bcf01bf3f Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 4.0 2017-10-27 02:30:55 +02:00
Laurent Destailleur
fed0f3d09e Merge branch '3.9' of git@github.com:Dolibarr/dolibarr.git into 4.0
Conflicts:
	htdocs/core/lib/project.lib.php
	htdocs/projet/class/task.class.php
2017-10-27 02:30:33 +02:00
Laurent Destailleur
07b25e457b Merge pull request #7652 from fappels/5.0_Fix_old_batch_not_shown_multi_shipping
FIX old batch not shown in multi shipping
2017-10-27 02:26:45 +02:00
Laurent Destailleur
78e3c63ead Update card.php 2017-10-27 02:26:37 +02:00
Laurent Destailleur
c48721e008 Merge branch '5.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-10-26 16:50:53 +02:00
Laurent Destailleur
0efd118d43 Fix hook on product list 2017-10-26 16:50:38 +02:00
fappels
eaafe83ae4 Only show old batch number and qty 2017-10-24 16:05:41 +02:00
Laurent Destailleur
c387436a68 Merge pull request #7671 from simnandez/4.0
FIX: Agenda events are not exported in the ICAL, VCAL if begin exactly with the same $datestart
2017-10-22 03:20:22 +02:00
Laurent Destailleur
fba3adbc5e Merge pull request #7670 from atm-ph/fix_5_0_empty_ref_shipment
Fix shipment ref is empty
2017-10-22 03:00:26 +02:00
Laurent Destailleur
b70808eca7 Merge pull request #7663 from tuxgasy/5.0_anchor_addline
Fix anchor after add line
2017-10-22 02:35:13 +02:00
Laurent Destailleur
8ac7dd8e9a Merge pull request #7660 from atm-gauthier/fix_project_time_spent
FIX : wrong personnal project time spent
2017-10-22 02:26:34 +02:00
Juanjo Menent
75580f253e FIX: Agenda events are not exported in the ICAL, VCAL if begin exactly with the same $datestart 2017-10-20 12:57:32 +02:00
atm-ph
08d5ff4736 Fix shipment ref is empty 2017-10-20 12:28:33 +02:00
Laurent Destailleur
fbc3be84e3 Merge pull request #7643 from atm-maxime/fix_dashboard_stats_links
Fix dashboard stats links
2017-10-19 19:26:49 +02:00
TuxGasy
9c3805c0d5 Fix anchor after add line 2017-10-19 14:10:58 +02:00
gauthier
3793ae323a FIX : wrong personnal project time spent 2017-10-19 09:46:19 +02:00
fappels
6b557fd92f Fix old batches not displayed in multi warehouse shipping
Old batches not available in product_lot table are not shown for
shipping from multiple warehouses
2017-10-17 22:19:45 +02:00
fappels
6ba7fe26a7 Merge remote-tracking branch 'refs/remotes/Dolibarr/5.0' into 5.0 2017-10-17 16:59:24 +02:00
Maxime Kohlhaas
b3f17dc614 Better with leftmenu 2017-10-16 20:20:55 +02:00
Maxime Kohlhaas
dac99c7745 Missing menus in links on index stats 2017-10-16 20:16:30 +02:00
Laurent Destailleur
20d4ba9ddd Merge pull request #7620 from atm-gauthier/fix_selectthirdparty
FIX : wrong key in selectarray
2017-10-13 00:46:15 +02:00
Laurent Destailleur
5ab88e629b Merge branch '5.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-10-12 18:32:33 +02:00
Laurent Destailleur
463441c808 Fix bad table name 2017-10-12 18:32:10 +02:00
gauthier
1e7676d26f FIX : wrong key in selectarray 2017-10-12 09:30:04 +02:00
Laurent Destailleur
b4018846e8 Merge pull request #7610 from atm-arnaud/FIX_search_conciliated_bankentries
FIX bankentries search conciliated if val 0
2017-10-11 11:54:21 +02:00
arnaud
fd796723f2 FIX bankentries search conciliated if val 0 2017-10-10 17:15:01 +02:00
Laurent Destailleur
346c17b649 Merge pull request #7176 from atm-maxime/fix_member_search_pgsql
Fix : search on rowid don't work with pgsql and natural search
2017-10-05 10:39:17 +02:00
Laurent Destailleur
56acb2c08c Fix: with 5.0 and 6.0, supplier prices are always in main currency. The currency is not yet available in supplier prices.
Field to define the currency of supplier prices were added in database but not yet used by screen/code.
2017-10-05 10:38:58 +02:00
Maxime Kohlhaas
37b1b161f9 Merge branch '5.0' of github.com:atm-maxime/dolibarr into fix_member_search_pgsql 2017-10-03 18:15:01 +02:00
Maxime Kohlhaas
123c9d2315 Better fix only if bdd is pgsql 2017-10-03 18:12:17 +02:00
Maxime Kohlhaas
29a6c7e6ba Merge branch '5.0' of https://github.com/Dolibarr/dolibarr into 5.0 2017-10-02 21:32:29 +02:00
Laurent Destailleur
ea5c54ad9c Merge pull request #7525 from hregis/5.0_bug2
Fix: two errors when you create invoice from shipping
2017-10-02 01:25:35 +02:00
Laurent Destailleur
ec8db116f8 Update llx_c_type_contact.sql 2017-10-02 01:25:28 +02:00
Laurent Destailleur
884fc5d249 Update facture.class.php 2017-10-02 01:25:00 +02:00
Laurent Destailleur
be84b52d19 Merge pull request #7518 from atm-ph/fix_5.0_hookmanager_situation_invoice
Fix the pdf_getlineprogress hook isn't use because hookmanager is null
2017-10-02 00:14:34 +02:00
Laurent Destailleur
7c690ae8b8 Merge pull request #7517 from simnandez/5.0
FIX: #7510 Bug: extrafield content disappear when generate pdf within intervention
2017-10-02 00:14:05 +02:00
Regis Houssin
4a63e6b6ec Fix: two errors when you create invoice from shipping 2017-09-29 19:07:13 +02:00
atm-ph
7ba2dd8397 Fix the pdf_getlineprogress hook isn't use because hookmanager is null 2017-09-28 15:25:51 +02:00
Juanjo Menent
93cf135d5e FIX: #7510 Bug: extrafield content disappear when generate pdf within intervention 2017-09-28 12:05:41 +02:00
Laurent Destailleur
3cc7f66e90 Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-09-25 19:48:42 +02:00
Laurent Destailleur
ef61407d95 Merge pull request #7459 from fmarcet/4.0
Fix: #7358 User can't create holiday requests
2017-09-24 21:54:33 +02:00
Laurent Destailleur
5776a948c4 Update card.php 2017-09-24 21:54:26 +02:00
fmarcet
72108c3a4e Fix: #7358 User can't create holiday requests with 'Create/modify your leave requests' rights 2017-09-21 15:59:50 +02:00
Laurent Destailleur
f5bc9c08b1 Missing css 2017-09-19 11:38:28 +02:00
Maxime Kohlhaas
5018bf1baf Merge branch '5.0' of https://github.com/Dolibarr/dolibarr into 5.0 2017-09-19 09:13:22 +02:00
Laurent Destailleur
278bcfa8da FIX #7148 2017-09-18 15:31:22 +02:00
Laurent Destailleur
52ebdcc27f Merge branch '5.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-09-18 15:25:51 +02:00
Laurent Destailleur
4c97f5514d FIX #7366 renaming table with pgsql 2017-09-18 15:25:21 +02:00
Laurent Destailleur
c6f7687bbb Merge pull request #7423 from tuxgasy/5.0_stock_supports_services_fix
FIX Allow create shipping if STOCK_SUPPORTS_SERVICES option is enabled
2017-09-18 15:09:30 +02:00
TuxGasy
4043141ae3 Allow create shipping if STOCK_SUPPORTS_SERVICES option is enabled 2017-09-18 14:11:21 +02:00
Maxime Kohlhaas
5383df5246 Merge branch '5.0' of https://github.com/Dolibarr/dolibarr into 5.0 2017-09-18 09:58:15 +02:00
Laurent Destailleur
e61bcd03ed Fix travis 2017-09-16 13:03:27 +02:00
Laurent Destailleur
3295498e9e Remove code comment 2017-09-16 12:50:34 +02:00
Laurent Destailleur
279988bd60 Remove warning 2017-09-16 12:45:54 +02:00
Laurent Destailleur
5bb4590348 Merge branch '5.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-09-16 12:12:18 +02:00
Laurent Destailleur
e4767b1a51 Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 5.0
Conflicts:
	htdocs/compta/facture/fiche-rec.php
	htdocs/fourn/class/fournisseur.facture.class.php
	htdocs/fourn/facture/card.php
2017-09-16 12:11:18 +02:00
Laurent Destailleur
97d5c067ac Merge pull request #7407 from atm-florian/5.0
fix : advance target emailing
2017-09-15 16:01:53 +02:00
florian HENRY
8b9b99ac40 fix : advance target emailing 2017-09-15 13:02:49 +02:00
Laurent Destailleur
5d920be880 FIX Upgrade missing on field 2017-09-14 16:51:41 +02:00
Laurent Destailleur
062152c723 Merge branch '5.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-09-14 16:42:19 +02:00
Laurent Destailleur
84359a0078 Fix maxlength of fields 2017-09-14 16:42:04 +02:00
Laurent Destailleur
5d068083e5 Merge pull request #7396 from tuxgasy/5.0_bug7386
Fix  #7386 : Decode DB password on upgrade
2017-09-14 14:48:55 +02:00
Laurent Destailleur
42399952ea Update check.php 2017-09-14 14:48:44 +02:00
TuxGasy
4bc8773417 decode db password if need 2017-09-14 13:52:39 +02:00
Laurent Destailleur
9e7108ff60 Merge pull request #7395 from tuxgasy/5.0_bug7387
Fix #7387 : filter closed company when create new documents
2017-09-14 13:26:03 +02:00
Laurent Destailleur
22b2446c05 Update card.php 2017-09-14 13:25:01 +02:00
Laurent Destailleur
d9947f2374 Update card.php 2017-09-14 13:24:24 +02:00
Laurent Destailleur
2de76d733b Update card.php 2017-09-14 13:24:01 +02:00
Laurent Destailleur
2798726dba Update card.php 2017-09-14 13:23:28 +02:00
Laurent Destailleur
f16d88fd53 FIX #7391 2017-09-14 13:17:31 +02:00
TuxGasy
f0983353f2 Fix #7387 : filter clsed company when create new documents 2017-09-14 12:01:35 +02:00
Laurent Destailleur
dbb50d7b16 Fix PHP 7.2 2017-09-14 11:56:43 +02:00
Laurent Destailleur
7d5dc08a0a Fix PHP7.2 2017-09-14 11:47:27 +02:00
Laurent Destailleur
fe1ce5b3ac Fix php 7.2 compatibility 2017-09-14 11:44:47 +02:00
Laurent Destailleur
9523bf5fbd Remove useless code 2017-09-14 10:23:17 +02:00
Laurent Destailleur
6d40f797d2 Fix regression 2017-09-13 21:50:14 +02:00
Laurent Destailleur
dc38ec5051 Fix regression 2017-09-13 20:48:24 +02:00
Laurent Destailleur
9b22f046f5 FIX multicompany better accuracy in rounding and with revenue stamp. 2017-09-13 19:31:32 +02:00
Laurent Destailleur
e0eef2080e FIX PDF output was sharing 2 different currencies in same total
Conflicts:
	htdocs/core/modules/commande/doc/pdf_einstein.modules.php
	htdocs/core/modules/facture/doc/pdf_crabe.modules.php
	htdocs/core/modules/product/doc/pdf_standard.modules.php
	htdocs/core/modules/propale/doc/pdf_azur.modules.php
2017-09-13 18:13:43 +02:00
Maxime Kohlhaas
0608778b9c Merge branch '5.0' of https://github.com/Dolibarr/dolibarr into 5.0 2017-09-12 11:00:28 +02:00
fappels
d5b7b7ec52 Merge remote-tracking branch 'refs/remotes/Dolibarr/5.0' into 5.0 2017-09-11 18:13:14 +02:00
Laurent Destailleur
e9912c020e Merge pull request #7333 from fappels/4.0_fix_transfer_line_extrafields
FIX transfer of line extrafields from order to invoice
2017-09-11 14:06:50 +02:00
fappels
7c743eb7da Rename $extrafields because already used 2017-09-07 21:04:15 +02:00
Laurent Destailleur
863c575580 Merge pull request #7342 from simnandez/5.0
FIX: Bad link to unpayed suppliers invoices
2017-09-07 18:09:56 +02:00
Laurent Destailleur
6701ad8b73 Merge pull request #7334 from fappels/4.0_fix_export_missing_sup_discount_qty
FIX missing supplier qty and supplier discount in available fields for product export.
2017-09-07 18:02:58 +02:00
Laurent Destailleur
3393947dbc Merge pull request #7329 from Jacques83300/5.0
FIX Add some missing attributes in Adherent:makeSubstitution (type, phone…
2017-09-07 17:57:05 +02:00
Juanjo Menent
7648d300b5 FIX: Bad link to unpayed suppliers invoices 2017-09-07 17:13:48 +02:00
Maxime Kohlhaas
18cbe31a84 Merge branch '5.0' of https://github.com/Dolibarr/dolibarr into 5.0 2017-09-07 09:10:24 +02:00
fappels
5a75e14a8a Add supplier qty and supplier discount for export 2017-09-05 22:50:34 +02:00
fappels
f5e14c9d70 Transfer of customer order line extrafield should only transfer fields available in target 2017-09-05 21:41:49 +02:00
fappels
237270a27e Add missing transfer of line extrafields in create invoice from supplier order 2017-09-05 21:40:04 +02:00
Laurent Destailleur
e599e47e84 Missing translation 2017-09-05 13:06:34 +02:00
Maxime Kohlhaas
4638ebac8a Merge branch '5.0' of https://github.com/Dolibarr/dolibarr into 5.0 2017-09-05 09:46:31 +02:00
Jacques83300
52986c5c07 Add some missing attributes in Adherent:makeSubstitution (type, phone numbers) for use in substitution of tags 2017-09-04 15:59:50 +02:00
Laurent Destailleur
d66fac5662 Prepare 5.0.7 2017-09-04 12:12:50 +02:00
Laurent Destailleur
a158f5ab9d Doc 2017-09-04 12:01:51 +02:00
Laurent Destailleur
67b5353861 Merge pull request #7327 from marcosgdf/bug-7000
FIX #7000 Dashboard link for late pending payment supplier invoices do not work
2017-09-04 10:54:58 +02:00
Laurent Destailleur
4dd58a94f3 Update list.php 2017-09-04 10:54:50 +02:00
Laurent Destailleur
1821be87e9 Merge pull request #7326 from marcosgdf/bug-7325
FIX #7325 Default VAT rate when editing template invoices is 0%
2017-09-04 10:53:07 +02:00
Laurent Destailleur
1154f871f1 Update fiche-rec.php 2017-09-04 10:52:49 +02:00
Laurent Destailleur
61ee071f43 Fix regression 2017-09-04 10:17:51 +02:00
Laurent Destailleur
2c3a696b78 Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-09-04 10:16:02 +02:00
Laurent Destailleur
65b6b142bd Tag only whe publishing on sf 2017-09-04 09:29:44 +02:00
Marcos García
eb9e8c9dfc FIX #7000 Dashboard link for late pending payment supplier invoices do not work
Close #7000
2017-09-03 12:42:05 +02:00
Marcos García
ac7f1035e1 FIX #7325 Default VAT rate when editing template invoices is 0%
Close #7325
2017-09-03 12:25:27 +02:00
Laurent Destailleur
f92129dcdb Fix packager to avoid symlinks into custom 2017-09-03 00:55:49 +02:00
Laurent Destailleur
9fe1d8462a Merge pull request #7318 from atm-maxime/fix_extrafieldsline_insert
Fix extrafieldsline insert
2017-09-02 00:07:00 +02:00
Laurent Destailleur
ffb408f440 Merge branch '5.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-09-01 15:20:48 +02:00
Laurent Destailleur
ac08dec2c3 Avoid warnings 2017-09-01 15:20:29 +02:00
Maxime Kohlhaas
cf49c274a6 Better fix 2017-09-01 10:38:50 +02:00
Maxime Kohlhaas
1a956cce9a Fix : insert line extrafield 2017-09-01 10:31:22 +02:00
Maxime Kohlhaas
49a29a16e6 Merge branch '5.0' of https://github.com/Dolibarr/dolibarr into 5.0 2017-08-31 09:02:21 +02:00
Laurent Destailleur
5a81073cd8 Merge pull request #7308 from hregis/5.0_bug2
Fix: documents dir not rename and delete
2017-08-30 16:41:17 +02:00
Regis Houssin
45136de664 Fix: documents dir not rename and delete 2017-08-30 11:26:48 +02:00
Maxime Kohlhaas
c3152a6343 Merge branch '5.0' of https://github.com/Dolibarr/dolibarr into 5.0 2017-08-28 10:32:04 +02:00
Laurent Destailleur
ba3581354a Prepare 5.0.6 2017-08-27 00:35:00 +02:00
Laurent Destailleur
5cc02ac97f Fix deletion of signatures 2017-08-26 22:07:29 +02:00
Laurent Destailleur
c8f323b706 Prepare 5.0.5 2017-08-26 21:55:34 +02:00
Laurent Destailleur
c91f70cbf4 Merge branch '5.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-08-26 21:53:46 +02:00
Laurent Destailleur
a01bb27d7e FIX install process with DoliWamp 2017-08-26 21:53:29 +02:00
Laurent Destailleur
4445c34af0 Merge pull request #7287 from hregis/5.0_bug2
Fix: (Agenda) Allowed if link to third party is empty
2017-08-26 19:32:24 +02:00
Laurent Destailleur
91644d2145 Merge pull request #7278 from hregis/5.0_bug
Fix: file delete link doesn't work
2017-08-26 19:26:50 +02:00
Laurent Destailleur
3e7ed752ea Add changelog 2017-08-26 11:55:30 +02:00
Regis Houssin
982fca541d Fix: (Agenda) Allowed if link to third party is empty 2017-08-24 08:33:40 +02:00
Laurent Destailleur
1b1d1a8d0b FIX #7156 2017-08-23 16:57:07 +02:00
Laurent Destailleur
947acfffe2 FIX #7173 2017-08-23 16:53:29 +02:00
Laurent Destailleur
6b5b10fc94 FIX #7224 2017-08-23 16:28:34 +02:00
Laurent Destailleur
52a8692a85 FIX #7226 2017-08-23 16:07:11 +02:00
Laurent Destailleur
29e656ec7e Merge branch '5.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-08-23 15:06:30 +02:00
Laurent Destailleur
4da49dfc2d FIX #7239 2017-08-23 15:02:38 +02:00
Laurent Destailleur
cabe7c696c Merge pull request #7280 from hregis/5.0_scandir
Fix: "scandir" in url is blocked in some providers
2017-08-23 12:52:32 +02:00
Regis Houssin
2492b9968a Fix: missing scandir 2017-08-23 10:21:10 +02:00
Regis Houssin
6dda2f3670 Fix: "scandir" in url is blocked in some providers 2017-08-23 10:07:00 +02:00
Regis Houssin
18ca96e285 Fix: file delete link doesn't work 2017-08-22 18:33:00 +02:00
Laurent Destailleur
41ce4886fd Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-08-22 11:15:30 +02:00
Laurent Destailleur
256f6e410c Merge branch '3.9' of git@github.com:Dolibarr/dolibarr.git into 4.0 2017-08-22 11:14:51 +02:00
Laurent Destailleur
d5d337c631 Merge branch '3.8' of git@github.com:Dolibarr/dolibarr.git into 3.9 2017-08-22 11:14:27 +02:00
Laurent Destailleur
71818da6a5 Merge branch '3.7' of git@github.com:Dolibarr/dolibarr.git into 3.8 2017-08-22 11:13:58 +02:00
Laurent Destailleur
c53aef9955 Merge branch '3.7' of git@github.com:Dolibarr/dolibarr.git into 3.7 2017-08-22 10:51:30 +02:00
Laurent Destailleur
a18995d3dc Merge branch '3.6' of git@github.com:Dolibarr/dolibarr.git into 3.7 2017-08-22 10:47:47 +02:00
Laurent Destailleur
5b0e6297bb Merge pull request #7272 from rycks/5.0_cron
FIX 'Error cronjob->run_job: Permission denied'
2017-08-22 10:43:29 +02:00
Laurent Destailleur
749355abc2 Update cron_run_jobs.php 2017-08-22 10:41:30 +02:00
Eric Seigne
64aed24539 remove comment 2017-08-20 09:45:11 +02:00
Eric Seigne
b77fe285dc fix 'Error cronjob->run_job: Permission denied' and add time and login used for debug helps 2017-08-20 09:39:51 +02:00
Laurent Destailleur
112a6f7b44 Fix travis 2017-08-17 23:51:35 +02:00
Laurent Destailleur
398733ff9a Fix syntax error 2017-08-17 23:44:16 +02:00
Laurent Destailleur
f2d5bcbbdd Merge pull request #7263 from simnandez/5.0
FIX: Bad tax calculation with expense report
2017-08-17 17:27:55 +02:00
Laurent Destailleur
323a6e34b5 Merge pull request #7250 from delcroip/patch-12
FIX: remove order rights on invoice page
2017-08-17 17:20:10 +02:00
Juanjo Menent
3330f040ba FIX: Bad tax calculation with expense report 2017-08-16 11:19:28 +02:00
Laurent Destailleur
dcd1a089b1 Merge pull request #7249 from delcroip/patch-11
Reconcile take page number into account
2017-08-11 17:08:40 +02:00
Laurent Destailleur
9ad2a9ac85 Merge pull request #7248 from fappels/4.0_fix_best_buy_price_calculation
FIX Best buy price calculation
2017-08-10 13:51:01 +02:00
Laurent Destailleur
2a59dbbc89 Merge pull request #7243 from altatof/fix_fourcard_hooks
FIX : supplier id was not passed to hooks
2017-08-10 13:44:43 +02:00
Laurent Destailleur
d5d92c6290 Update adherent_type.class.php 2017-08-10 12:59:01 +02:00
delcroix Patrick
e96eadb5e7 FIX: remove order rights on invoice page 2017-08-09 23:15:49 +02:00
delcroix Patrick
593d06e91e Reconcile take pqge number into account 2017-08-09 22:24:06 +02:00
fappels
ca3cdfabec FIX Best buy price calculation
Best buy price also depends on buy discount.
2017-08-09 14:15:26 +02:00
Laurent Destailleur
bfa8630feb Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 4.0 2017-08-07 20:07:36 +02:00
Laurent Destailleur
0bf4ac6fb3 Add missing field fk_supplier_proposal 2017-08-07 20:06:26 +02:00
Laurent Destailleur
0960473c9b More complete repair of unicode field 2017-08-07 15:51:30 +02:00
Laurent Destailleur
fd38a55f51 FIX amount overlap other amount when a pagebreak is done due to an image
at the bottom of page.
2017-08-07 15:49:54 +02:00
altatof
2be75420ca FIX : supplier id was not passed to hooks 2017-08-07 10:21:38 +02:00
Laurent Destailleur
1c157c7c3d Fix pb with mix collation. Add a way to fix this in repair. 2017-08-04 21:23:40 +02:00
Laurent Destailleur
e039f7cc22 Complete repair script 2017-08-04 16:37:24 +02:00
Laurent Destailleur
5e305a0c9d Merge branch '5.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-08-04 15:32:01 +02:00
Laurent Destailleur
a7dda865c9 Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-08-04 15:29:54 +02:00
Laurent Destailleur
51a3946519 Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 4.0 2017-08-04 15:29:18 +02:00
Laurent Destailleur
a3beceade2 Merge branch '3.9' of git@github.com:Dolibarr/dolibarr.git into 4.0 2017-08-04 15:28:55 +02:00
Laurent Destailleur
d345b9503a Merge branch '3.9' of git@github.com:Dolibarr/dolibarr.git into 3.9 2017-08-04 15:28:03 +02:00
Laurent Destailleur
f8d6eb0d40 Merge branch '3.8' of git@github.com:Dolibarr/dolibarr.git into 3.9 2017-08-04 15:25:41 +02:00
Laurent Destailleur
7d9b9f96f0 Merge pull request #7234 from fmarcet/3.9
Fix: Correction in the calculation of the next week
2017-08-04 15:25:05 +02:00
Laurent Destailleur
3017e2b3a0 Merge pull request #7232 from ATM-Marc/FIX_future_accounting
FIX calculate correct remain to pay for planned bank transactions
2017-08-04 15:23:00 +02:00
Laurent Destailleur
156915a502 Merge pull request #7223 from atm-florian/5.0_fix_missingHook
FIX add missing hook into product price card
2017-08-04 15:13:09 +02:00
Laurent Destailleur
52d39d9d5a Code comment 2017-08-02 17:45:35 +02:00
Laurent Destailleur
cc78a666a0 Fix missing status billed when WORKFLOW_BILL_ON_SHIPMENT is on 2017-08-02 17:15:51 +02:00
Ferran Marcet
09c271b7c5 Fix: Correction in the calculation of the next week 2017-08-02 10:31:16 +02:00
Marc de Lima Lucio
adbb41799c FIX: calculate correct remain to pay for planned bank transactions 2017-08-01 11:08:58 +02:00
Laurent Destailleur
ddee802324 Add second parameter in GETPOST 2017-08-01 10:22:09 +02:00
florian HENRY
53add04a2e fix :add missing hook into product price card 2017-07-31 10:28:24 +02:00
Laurent Destailleur
651bf525b0 Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 5.0
Conflicts:
	htdocs/cron/class/cronjob.class.php
2017-07-31 02:37:28 +02:00
Laurent Destailleur
cd6a3afc77 Merge pull request #7191 from hregis/4.0_bug3
Fix: run_jobs return always an error !!
2017-07-31 02:21:37 +02:00
Maxime Kohlhaas
e1dd85d261 Merge branch '5.0' of https://github.com/Dolibarr/dolibarr into 5.0 2017-07-27 10:05:00 +02:00
Regis Houssin
b932ce6246 Update cronjob.class.php
is better condition for use true or 0

if ($result === false || (! is_bool($result) && $result != 0))
2017-07-26 01:25:15 +02:00
Laurent Destailleur
ab72fbffc6 Fix pb with .svg files 2017-07-25 23:02:14 +02:00
Laurent Destailleur
8b793a261f Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 5.0
Conflicts:
	htdocs/core/modules/DolibarrModules.class.php
2017-07-25 21:08:31 +02:00
Laurent Destailleur
d81fcd5f66 Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 4.0 2017-07-25 21:05:35 +02:00
Laurent Destailleur
b7c4f1f086 Merge branch '3.9' of git@github.com:Dolibarr/dolibarr.git into 4.0
Conflicts:
	htdocs/compta/facture.php
2017-07-25 21:05:15 +02:00
Regis Houssin
a52adcad4a Fix: change the condition 2017-07-25 13:52:10 +02:00
Laurent Destailleur
91d274b51e Merge pull request #7187 from hguibourgdev/patch-11
New : Prepare toolkit for alert warning
2017-07-25 13:19:00 +02:00
Laurent Destailleur
3ec2d6014b Merge pull request #7183 from hregis/4.0_bug2
Fix: wrong values if array used to force entity 0
2017-07-25 13:14:24 +02:00
Laurent Destailleur
fdcc067c23 Fix regression. Restore lost link "Other invoices". 2017-07-25 10:02:56 +02:00
Laurent Destailleur
aa9b4ce1f3 Fix too long combo for tags 2017-07-25 09:49:08 +02:00
Laurent Destailleur
d5d95c31a6 Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-07-23 19:07:14 +02:00
Laurent Destailleur
585dde6cf5 Fix url 2017-07-23 19:06:47 +02:00
Regis Houssin
c9c375f3b8 Fix: run_jobs return always an error !! 2017-07-23 10:29:45 +02:00
Laurent Destailleur
44023606c6 Fix pb in dolGetFirstLineOfText. Add PHPunit 2017-07-22 12:47:35 +02:00
hguibourgdev
1f5a71f2c9 New : Prepare toolkit for alert warning 2017-07-22 12:18:54 +02:00
Regis Houssin
2e63393bf2 Fix: wrong values if array used to force entity 0 2017-07-21 19:35:08 +02:00
Laurent Destailleur
1fcc2c4918 Merge pull request #7172 from atm-gauthier/3.9_fix_positivebuyingprice
FIX : Buying prices must always be in positive valueo
2017-07-21 15:13:48 +02:00
Maxime Kohlhaas
4cab48a000 Merge branch '5.0' of https://github.com/Dolibarr/dolibarr into 5.0 2017-07-19 08:06:54 +02:00
Laurent Destailleur
6e77dab832 Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-07-18 15:13:15 +02:00
Laurent Destailleur
7e1d282b1b Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 4.0 2017-07-18 15:12:28 +02:00
Laurent Destailleur
e41b98b5d4 Merge branch '3.9' of git@github.com:Dolibarr/dolibarr.git into 4.0 2017-07-18 15:12:03 +02:00
Laurent Destailleur
b215940277 Merge pull request #7174 from atm-maxime/fix_user_from_member
Fix : creating user from member was failing due to column size difference
2017-07-18 14:49:33 +02:00
Laurent Destailleur
98cb1b7af1 Merge pull request #7171 from atm-ph/fix_5.0_search_lost
Fix lost search value in list if come from thirdparty card
2017-07-18 14:48:38 +02:00
Laurent Destailleur
f6060b976d Update list.php 2017-07-18 14:48:18 +02:00
Laurent Destailleur
7ac5054df8 Update list.php 2017-07-18 14:47:44 +02:00
Laurent Destailleur
ba2dcb9221 Merge pull request #7166 from hregis/5.0_bug
Fix: Trusty become default linux the July 18th 2017
2017-07-18 14:45:55 +02:00
Laurent Destailleur
9ea30c427e Merge pull request #7160 from hguibourgdev/patch-4
Update card.php
2017-07-18 14:36:12 +02:00
Laurent Destailleur
e19167dffa Merge pull request #7154 from atm-ph/fix_3.9_contrat_updateline_extra
Fix updateline extrafields contrat fail
2017-07-18 14:30:55 +02:00
Laurent Destailleur
97fe41d603 A info int smtp header 2017-07-18 12:49:19 +02:00
Maxime Kohlhaas
f876833b9a Fix : search on rowid don't work with pgsql and natural search 2017-07-18 10:31:35 +02:00
Maxime Kohlhaas
ce534491fd Merge branch '5.0' of https://github.com/Dolibarr/dolibarr into 5.0 2017-07-18 10:19:11 +02:00
Maxime Kohlhaas
d35dbdea92 Change column size in sql table creation also 2017-07-18 10:16:59 +02:00
Laurent Destailleur
2a50a78497 Fix hack to solve link to restrictions 2017-07-18 10:15:48 +02:00
Maxime Kohlhaas
76eac7ce6a Fix : creating user from member was failing due to column size difference 2017-07-18 10:13:10 +02:00
Maxime Kohlhaas
843172ccc8 Merge branch '5.0' of https://github.com/Dolibarr/dolibarr into 5.0 2017-07-17 11:38:37 +02:00
gauthier
ccbeb162cf FIX : Buying prices must always be in positive valueo 2017-07-17 11:27:57 +02:00
phf
885fc3c5b7 Fix lost search value in list if come from thirdparty card 2017-07-17 11:04:48 +02:00
Regis Houssin
2c5bdaf4ad Fix: Trusty become default linux the July 18th 2017 2017-07-16 08:23:27 +02:00
Laurent Destailleur
4e45c7fdba Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 5.0
Conflicts:
	htdocs/supplier_proposal/class/supplier_proposal.class.php
2017-07-15 21:21:40 +02:00
Laurent Destailleur
f9b9a9972e Fix value not defined 2017-07-15 17:22:57 +02:00
hguibourgdev
2166b3d467 Update card.php
FIX "!" is missing on test : empty($object->date_livraison)
2017-07-15 12:04:59 +02:00
Laurent Destailleur
4055ac82ab Merge branch '5.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-07-15 03:47:54 +02:00
Laurent Destailleur
24ecd48b22 Minor fix 2017-07-15 03:40:37 +02:00
phf
f1c23f25f0 Fix updateline extrafields contrat fail 2017-07-13 16:49:58 +02:00
Laurent Destailleur
6023e686a4 Merge pull request #7139 from atm-florian/5.0_fixmigMG
FIX PgSQL
2017-07-13 14:27:18 +02:00
Laurent Destailleur
cbef85ddef Merge branch '5.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-07-13 14:17:08 +02:00
Laurent Destailleur
cd3d18cb4d Fix detection of payment for credit note 2017-07-13 14:16:51 +02:00
florian HENRY
017b654acd FIX PgSQL 2017-07-11 17:45:16 +02:00
Maxime Kohlhaas
794d638ded Merge branch '5.0' of https://github.com/Dolibarr/dolibarr into 5.0 2017-07-11 09:37:45 +02:00
Laurent Destailleur
1617deeb81 Merge pull request #7132 from Gecka-Apps/5.0-fix1
Fixes local taxes repports by rate
2017-07-10 21:30:39 +02:00
Laurent Destailleur
715280b03a Merge pull request #7131 from atm-maxime/4.0
Fix : script to migrate photo path
2017-07-10 21:27:56 +02:00
Laurent Dinclaux
64a5be3e00 Fixes travis error: Arguments with default values must be at the end of the argument list 2017-07-10 14:14:21 +11:00
Laurent Dinclaux
244574f8e6 Fixes functions comments 2017-07-10 13:19:59 +11:00
Laurent Dinclaux
253f7e252d Fixes local taxes repports by rate 2017-07-10 13:15:14 +11:00
Maxime Kohlhaas
f166c96ed5 Fix : script to migrate photo path 2017-07-09 13:09:17 +02:00
Maxime Kohlhaas
ba283377b9 Merge branch '5.0' of https://github.com/Dolibarr/dolibarr into 5.0 2017-07-09 10:13:02 +02:00
Laurent Destailleur
65ea0fc2b4 FIX value of user id filled to 0 in llx_bank_url when recording an
expense report.
2017-07-08 22:16:35 +02:00
Laurent Destailleur
7b6e60077a FIX id of user not saved when making a payment of expense report 2017-07-08 21:53:28 +02:00
Laurent Destailleur
4290be7ee6 Merge branch '5.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-07-08 18:10:02 +02:00
Laurent Destailleur
ba3b6b6aa5 Better support of vat with code in expense report 2017-07-08 18:09:45 +02:00
Laurent Destailleur
efd292e8f5 Merge pull request #7126 from atm-gauthier/FIX_add_contact
FIX : we have to check if contact doesn't already exist on add_contact
2017-07-07 20:33:24 +02:00
Laurent Destailleur
5046852caa Merge pull request #7121 from jfefe/patch-14
Bad path for document file
2017-07-07 20:15:18 +02:00
Laurent Destailleur
bd0dba6439 Update card.php
Better fix for future
2017-07-07 20:14:47 +02:00
Laurent Destailleur
b461d24f52 Merge pull request #7119 from atm-alexis/FIX_situ_pdf_total_VAT
FIX invoice situation VAT total rounding into PDF crabe
2017-07-07 20:11:55 +02:00
Laurent Destailleur
249bfa3412 Merge pull request #7117 from atm-arnaud/FIX_insert_supplierpropale_det
Fix add supplierproposaldet without price (new product)
2017-07-07 20:09:52 +02:00
Laurent Destailleur
0d575b4cdf Merge pull request #7107 from atm-john/fix_contract_card
Fix return method
2017-07-07 19:58:27 +02:00
Laurent Destailleur
b7af0cca63 Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 5.0
Conflicts:
	htdocs/compta/facture/list.php
	htdocs/holiday/card.php
2017-07-07 19:39:57 +02:00
Laurent Destailleur
fd5f992be4 Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 4.0 2017-07-07 19:15:18 +02:00
Laurent Destailleur
4c1b485d47 Merge branch '3.9' of git@github.com:Dolibarr/dolibarr.git into 4.0
Conflicts:
	htdocs/compta/facture/list.php
2017-07-07 19:06:25 +02:00
Laurent Destailleur
12a41d7dd2 Merge pull request #7091 from atm-arnaud/FIX_referent_invoice_list_in_product_card
FIX status were wrong on product for invoice referent list
2017-07-07 19:03:19 +02:00
Laurent Destailleur
c6fc7313b1 Merge pull request #7116 from atm-ph/fix_7109
FIX 7109 - class name already exist for customer payment
2017-07-07 19:01:10 +02:00
Laurent Destailleur
d58682c574 Merge pull request #7088 from atm-arnaud/FIX_edit_social_emptying_label
FIX edit sociale was emptying label
2017-07-07 18:59:10 +02:00
Laurent Destailleur
b0359b4659 Merge pull request #7081 from atm-florian/5.0
fix class error (given by eclipse Oxygen version)
2017-07-07 18:35:47 +02:00
Laurent Destailleur
eef027acb4 Merge pull request #7080 from atm-arnaud/FIX_holidays_postgresql
FIX holidays postgresql search
2017-07-07 18:31:54 +02:00
Maxime Kohlhaas
f8ad108da6 Merge branch '5.0' of https://github.com/Dolibarr/dolibarr into 5.0 2017-07-07 12:07:35 +02:00
gauthier
a6f1e08c19 FIX : we have to check if contact doesn't already exist on add_contact() function 2017-07-07 11:48:30 +02:00
Laurent Destailleur
2aaf8b22f2 Fix substitution var 2017-07-07 10:10:12 +02:00
jfefe
a072b23a5e FIX #7075 : bad path for document 2017-07-06 00:47:26 +02:00
alexis Algoud
3d18c71201 FIX invoice situation VAT total rounding into PDF crabe 2017-07-05 17:21:37 +02:00
arnaud
1a71e9b4a0 FIX add supplierproposaldet without price (new product) 2017-07-05 16:57:03 +02:00
phf
31b94c1d3f Fix 7109 - class name already exist for customer payment 2017-07-05 16:52:37 +02:00
Laurent Destailleur
e199864fce Better log 2017-07-05 00:09:35 +02:00
Laurent Destailleur
ea8a49aea3 Prepare 5.0.5 2017-07-04 17:38:20 +02:00
Laurent Destailleur
451e8fc024 FIX Support of vat code when using price per customer 2017-07-04 17:37:28 +02:00
John
e1ae97e661 Fix return method 2017-07-04 10:34:59 +02:00
Laurent Destailleur
a5cfd7c2e2 FIX Error when updating thirdparty not returned 2017-07-01 16:24:33 +02:00
Laurent Destailleur
b308cfef1d Fix dol_trunc 2017-06-30 18:30:01 +02:00
Laurent Destailleur
d55213286e Fix missing parameter 2017-06-30 11:40:26 +02:00
Laurent Destailleur
ea504a0516 FIX We should be able to insert data with value '0' into const 2017-06-30 11:10:05 +02:00
arnaud
ca6ce2ba8b FIX status were wrong on product referent list 2017-06-30 10:38:54 +02:00
arnaud
f79b72f724 FIX edit sociale was emptying label 2017-06-29 16:57:30 +02:00
florian HENRY
6e8c83b2a9 fix class error (given by eclipse Oxygen version) 2017-06-29 15:47:33 +02:00
Laurent Destailleur
4c1c361a15 Merge branch '5.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-06-29 15:36:59 +02:00
Laurent Destailleur
2f8c0bb555 Revert "To provide solution to get thirdparty when name is not unique."
This reverts commit 58328d36b3.
2017-06-29 15:36:39 +02:00
Laurent Destailleur
58328d36b3 To provide solution to get thirdparty when name is not unique. 2017-06-29 15:32:36 +02:00
arnaud
9da9dff3c3 Merge branch '5.0' of github.com:Dolibarr/dolibarr into FIX_holidays_postgresql 2017-06-29 14:37:03 +02:00
arnaud
a695fa9c6e FIX holidays with postgresql like on rowid integer 2017-06-29 14:36:10 +02:00
Laurent Destailleur
724392a557 Merge pull request #7073 from fmarcet/3.9
FIX: User id correction on holiday request
2017-06-29 02:45:53 +02:00
fmarcet
4283b1ee30 FIX: User id correction on holiday request 2017-06-28 18:31:37 +02:00
Laurent Destailleur
97902bdee7 Merge pull request #7066 from atm-maxime/fix_vat_column
Fix column position in PDF when VAT is hidden
2017-06-28 16:12:49 +02:00
Maxime Kohlhaas
cef5c0b375 Fix column position in PDF when VAT is hidden 2017-06-28 00:38:24 +02:00
Maxime Kohlhaas
98208b9963 Merge branch '5.0' of https://github.com/Dolibarr/dolibarr into 5.0 2017-06-28 00:33:24 +02:00
Maxime Kohlhaas
3664956b8c Update pdf_azur.modules.php 2017-06-28 00:31:33 +02:00
Laurent Destailleur
f899408fc9 Merge pull request #7063 from atm-arnaud/FIX_invoice_page_list
FIX invoice page list
2017-06-27 18:37:51 +02:00
Laurent Destailleur
ae6b097573 Merge pull request #7057 from atm-john/FIX_linked_element_facture_rec
FIX delete linked element on facture rec
2017-06-27 17:34:30 +02:00
arnaud
65b9b70ff8 FIX invoice page list 2017-06-27 15:23:51 +02:00
Maxime Kohlhaas
8eba418715 Merge branch '5.0' of https://github.com/Dolibarr/dolibarr into 5.0 2017-06-27 12:19:10 +02:00
Laurent Destailleur
a8d7764146 Merge branch '3.9' of git@github.com:Dolibarr/dolibarr.git into 3.9 2017-06-27 12:06:16 +02:00
Laurent Destailleur
99c7867522 Fix travis 2017-06-27 12:06:01 +02:00
John
93477c102f FIX delete linked element on facture rec 2017-06-26 15:44:04 +02:00
Laurent Destailleur
3a6314b1a0 Fix data 2017-06-26 13:29:18 +02:00
Laurent Destailleur
4a21457b8a Fix position of page nb 2017-06-26 09:28:02 +02:00
Laurent Destailleur
85ce1f3332 Fix missing var init 2017-06-26 09:20:16 +02:00
Laurent Destailleur
1b3544e794 Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-06-25 02:28:38 +02:00
Laurent Destailleur
480587c826 Fix travis errors 2017-06-25 02:28:07 +02:00
Laurent Destailleur
e6e8a014a3 Prepare 5.0.4 2017-06-24 21:39:01 +02:00
Laurent Destailleur
ab9be29356 Fix installers 2017-06-24 21:36:51 +02:00
Laurent Destailleur
e79f3715b4 FIX #7048 #6075 2017-06-24 16:21:25 +02:00
Laurent Destailleur
ee8924e101 Fix position of accounting periods 2017-06-24 10:23:38 +02:00
Laurent Destailleur
1211e0d7ab FIX vat code not saved during product creation. 2017-06-23 12:09:21 +02:00
Laurent Destailleur
45004493e0 Fix multicurrency and vat_src_code not propaged on invoice from
shipment.
2017-06-23 11:12:17 +02:00
Laurent Destailleur
ecae2fc6b6 Fix translation 2017-06-23 11:08:49 +02:00
Maxime Kohlhaas
ea616114a9 Merge branch '5.0' of https://github.com/Dolibarr/dolibarr into 5.0 2017-06-20 22:16:19 +02:00
Laurent Destailleur
3ec0e6f7ef FIX #6885 2017-06-20 12:31:08 +02:00
Laurent Destailleur
a7fb411a42 Merge branch '5.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-06-20 10:46:38 +02:00
Laurent Destailleur
d572bd4f34 FIX #7003 2017-06-20 10:45:20 +02:00
Laurent Destailleur
6d42922839 FIX #7012 2017-06-20 10:37:42 +02:00
Laurent Destailleur
d8b0199ba2 FIX #7040 2017-06-20 10:24:54 +02:00
Maxime Kohlhaas
166b5da560 Merge branch '5.0' of https://github.com/Dolibarr/dolibarr into 5.0 2017-06-20 09:29:26 +02:00
Laurent Destailleur
dbeb31cad3 Merge pull request #7039 from marcosgdf/bug-5640
FIX #5640 Prices of a predefined product/service were incorrect under certain circumstances
2017-06-20 01:15:33 +02:00
Laurent Destailleur
fd197c5780 Merge pull request #7041 from marcosgdf/bug-6541
FIX #6541 since 4.0.4 to 5.0.0 autofill zip/town not working
2017-06-20 01:13:07 +02:00
Laurent Destailleur
1f83bef1b5 Merge pull request #7035 from fmarcet/3.9
Fix: User id correction on holiday request
2017-06-20 00:57:10 +02:00
Laurent Destailleur
1745d06bb7 Merge branch '3.8' of git@github.com:Dolibarr/dolibarr.git into 3.9 2017-06-19 19:56:16 +02:00
Laurent Destailleur
12d7b92556 Merge branch '3.7' of git@github.com:Dolibarr/dolibarr.git into 3.8 2017-06-19 19:52:49 +02:00
Laurent Destailleur
6fb0fc7b71 Merge branch '3.6' of git@github.com:Dolibarr/dolibarr.git into 3.7 2017-06-19 19:42:56 +02:00
Laurent Destailleur
f694939fc7 Fix migration with pgsql 2017-06-19 19:39:37 +02:00
Marcos García
eaaee59f92 FIX #6541 since 4.0.4 to 5.0.0 autofill zip/town not working 2017-06-19 19:23:00 +02:00
Marcos García
ba87549124 FIX #5640 Prices of a predefined product/service were incorrect under certain circumstances 2017-06-19 18:07:43 +02:00
fmarcet
c4546b6da6 FIX: User id correction on holiday request 2017-06-19 16:23:44 +02:00
Ferran Marcet
03eadcebf1 FIX: User id correction on holiday request 2017-06-19 12:25:00 +02:00
Laurent Destailleur
4c55700157 Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-06-19 04:15:20 +02:00
Laurent Destailleur
71641c5743 Merge branch '3.9' of git@github.com:Dolibarr/dolibarr.git into 4.0 2017-06-19 04:14:07 +02:00
Laurent Destailleur
ebc18cd2d4 Merge branch '3.8' of git@github.com:Dolibarr/dolibarr.git into 3.9 2017-06-19 04:13:24 +02:00
Laurent Destailleur
d0d9de37f4 Merge branch '3.7' of git@github.com:Dolibarr/dolibarr.git into 3.8 2017-06-19 04:05:40 +02:00
Laurent Destailleur
1bfdc7438a Merge branch '3.6' of git@github.com:Dolibarr/dolibarr.git into 3.7 2017-06-19 04:03:26 +02:00
Regis Houssin
9352ecca1f Fix: PHP 7 - Fatal error: 'break' not in the 'loop' or 'switch' context 2017-06-19 04:01:34 +02:00
Laurent Destailleur
43f25b49a1 Merge branch '4.0' of git@github.com:Dolibarr/dolibarr.git into 5.0 2017-06-19 03:00:29 +02:00
Laurent Destailleur
5cd5986211 Merge branch '3.9' of git@github.com:Dolibarr/dolibarr.git into 4.0 2017-06-19 02:59:49 +02:00
Laurent Destailleur
39419bb411 Merge branch '3.8' of git@github.com:Dolibarr/dolibarr.git into 3.9 2017-06-19 02:59:16 +02:00
Laurent Destailleur
774c624687 Merge branch '3.7' of git@github.com:Dolibarr/dolibarr.git into 3.8 2017-06-19 02:58:44 +02:00
Laurent Destailleur
5439390461 Merge branch '3.6' of git@github.com:Dolibarr/dolibarr.git into 3.7 2017-06-19 02:57:12 +02:00
Laurent Destailleur
6fc4dacd42 Fix migration opensurvey 2017-06-19 02:55:33 +02:00
Laurent Destailleur
317ab64d7c Fix escapement 2017-06-18 22:03:25 +02:00
Laurent Destailleur
f3a5975cf8 Fix sql injection 2017-06-18 21:58:56 +02:00
Laurent Destailleur
8debefa8ad Fix php sanitazing 2017-06-18 21:53:06 +02:00
Laurent Destailleur
0ef507ae7f Fix rename of file to remove .noexe extension. 2017-06-18 21:52:51 +02:00
Laurent Destailleur
abe736c6a6 Escape hml tags 2017-06-18 19:42:59 +02:00
Maxime Kohlhaas
c8172d2b49 Merge branch '5.0' of https://github.com/Dolibarr/dolibarr into 5.0 2017-06-13 11:59:10 +02:00
Maxime Kohlhaas
ec5b304634 Merge branch '5.0' of https://github.com/Dolibarr/dolibarr into 5.0 2017-06-09 11:05:37 +02:00
Maxime Kohlhaas
e19de25297 Merge branch '5.0' of https://github.com/Dolibarr/dolibarr into 5.0 2017-06-08 11:36:02 +02:00
Maxime Kohlhaas
9b74a632e1 Merge branch '5.0' of https://github.com/Dolibarr/dolibarr into 5.0 2017-06-07 09:24:40 +02:00
Maxime Kohlhaas
5f6c63948e Merge branch '5.0' of https://github.com/Dolibarr/dolibarr into 5.0 2017-06-01 13:06:32 +02:00
Maxime Kohlhaas
0b5adc7795 Merge branch '5.0' of https://github.com/Dolibarr/dolibarr into 5.0 2017-06-01 11:55:54 +02:00
Maxime Kohlhaas
2f6fe2c65e Merge branch '5.0' of https://github.com/Dolibarr/dolibarr into 5.0 2017-05-30 14:10:20 +02:00
Maxime Kohlhaas
6ac08c3bee Fix : Product supplier price is related to supplier's currency 2017-05-29 10:32:17 +02:00
263 changed files with 4131 additions and 2997 deletions

0
.gitignore vendored Executable file → Normal file
View File

View File

@@ -2,6 +2,7 @@
# from Dolibarr GitHub repository.
# For syntax, see http://about.travis-ci.org/docs/user/languages/php/
dist: precise
sudo: required
language: php
@@ -10,7 +11,7 @@ php:
- '5.3'
- '5.4'
- '5.5'
- '5.6'
- '5.6.29'
- '7.0'
- '7.1'
- nightly
@@ -132,10 +133,10 @@ before_script:
echo "Set timezone"
echo 'date.timezone = "Europe/Paris"' >> ~/.phpenv/versions/$PHP_VERSION_NAME/etc/php.ini
if [ "$TRAVIS_PHP_VERSION" = '5.3' ] || [ "$TRAVIS_PHP_VERSION" = '5.4' ]; then
echo
echo "Enabling APC for PHP <= 5.4"
#echo
#echo "Enabling APC for PHP <= 5.4"
# Documentation says it should be available for PHP <= 5.6 but it's not for 5.5 and 5.6!
echo 'extension = apc.so' >> ~/.phpenv/versions/$PHP_VERSION_NAME/etc/php.ini
#echo 'extension = apc.so' >> ~/.phpenv/versions/$PHP_VERSION_NAME/etc/php.ini
echo
echo "Enabling Memcached for PHP <= 5.4"
# Documentation says it should be available for all PHP versions but it's not for 5.5 and 5.6, 7.0, 7.1 and nightly!

View File

@@ -2,10 +2,67 @@
English Dolibarr ChangeLog
--------------------------------------------------------------
***** ChangeLog for 5.0.7 compared to 5.0.6 *****
FIX: #7000 Dashboard link for late pending payment supplier invoices do not work
FIX: #7148
FIX: #7325 Default VAT rate when editing template invoices is 0%
FIX: #7366 renaming table with pgsql
FIX: #7391
FIX: #7510 Bug: extrafield content disappear when generate pdf within intervention
FIX: Agenda events are not exported in the ICAL, VCAL if begin exactly with the same $datestart
FIX: Bad link to unpayed suppliers invoices
FIX: bankentries search conciliated if val 0
FIX: multicompany better accuracy in rounding and with revenue stamp.
FIX: PDF output was sharing 2 different currencies in same total
FIX: Upgrade missing on field
FIX: wrong key in selectarray
FIX: wrong personnal project time spent
***** ChangeLog for 5.0.6 compared to 5.0.5 *****
FIX: Removed a bad symbolic link into custom directory.
FIX: Renaming a resouce ref rename also the directory of attached files.
***** ChangeLog for 5.0.5 compared to 5.0.4 *****
FIX: #7075 : bad path for document
FIX: #7156
FIX: #7173
FIX: #7224
FIX: #7226
FIX: #7239
FIX: add supplierproposaldet without price (new product)
FIX: amount overlap other amount when a pagebreak is done due to an image at the bottom of page.
FIX: Bad tax calculation with expense report
FIX: Best buy price calculation
FIX: Buying prices must always be in positive value.
FIX: calculate correct remain to pay for planned bank transactions
FIX: delete linked element on facture rec
FIX: edit sociale was emptying label
FIX: Error when updating thirdparty not returned
FIX: holidays with postgresql like on rowid integer
FIX: id of user not saved when making a payment of expense report
FIX: invoice page list
FIX: invoice situation VAT total rounding into PDF crabe
FIX: PgSQL compatibility.
FIX: remove order rights on invoice page
FIX: status were wrong on product referent list
FIX: supplier id was not passed to hooks
FIX: Support of vat code when using price per customer
FIX: User id correction on holiday request
FIX: value of user id filled to 0 in llx_bank_url when recording an expense report.
FIX: we have to check if contact doesn't already exist on add_contact() function
FIX: We should be able to insert data with value '0' into const
FIX: install process with DoliWamp
***** ChangeLog for 5.0.4 compared to 5.0.3 *****
FIX: #6880
FIX: #6925
FIX: #5640 Prices of a predefined product/service were incorrect under certain circumstances
FIX: #6541 since 4.0.4 to 5.0.0 autofill zip/town not working
FIX: #6880 #6925
FIX: #6885
FIX: #6926
FIX: #7003
FIX: #7012
FIX: #7040
FIX: #7048 #6075
FIX: Can set supplier invoice to billed.
FIX: Can't create invoice if PO disapproved
FIX: contratligne update
@@ -17,6 +74,7 @@ FIX: Redirect to payment page from member subscription page failed if a unique s
FIX: REST api to get project when user has permission to read all.
FIX: situation_progress param default value must be 100 and not 0
FIX: SQL injection on user/index.php parameter search_statut.
FIX: vat code not saved during product creation.
FIX: Warnings
***** ChangeLog for 5.0.3 compared to 5.0.2 *****
@@ -499,7 +557,7 @@ NEW: Disabled users are striked.
NEW: Enhance navigation of project module
NEW: fichinter lines ordered by rang AND DATE
NEW: hidden conf to use input file multiple from mail form
NEW: hidden feature: SUPPLIERORDER_WITH_NOPRICEDEFINED allow supplier order even if no supplier price defined
NEW: hidden feature: SUPPLIER_ORDER_WITH_NOPRICEDEFINED allow supplier order even if no supplier price defined
NEW: Hidden option MAIN_LANDING_PAGE to choose the first page to show after login works as a "global" option (llx_const) and as a "per user" option (llx_user_param).
NEW: Holiday is a now a RH module. All RH module provides by default visilibity on users of its hierarchy.
NEW: If error is reported during migration process, you can ignore it to avoid to be locked.

View File

@@ -1,6 +1,6 @@
# DOLIBARR ERP & CRM
![Build status](https://img.shields.io/travis/Dolibarr/dolibarr/develop.svg) ![Downloads per day](https://img.shields.io/sourceforge/dm/dolibarr.svg)
![Build status](https://img.shields.io/travis/Dolibarr/dolibarr/5.0.svg) ![Downloads per day](https://img.shields.io/sourceforge/dm/dolibarr.svg)
Dolibarr ERP & CRM is a modern software package to manage your organization's activity (contacts, suppliers, invoices, orders, stocks, agenda, ...).

View File

@@ -353,8 +353,10 @@ begin
begin
// TODO Copy file or ask to install package ?
//CustomMessage('YouWillInstallDoliWamp')+#13#13
MsgBox('The package vcredist_x86.exe must have been installed first. It seems it is not. Please install it first from <a href="http://ccc">http://www.microsoft.com/en-us/download/details.aspx?id=30679</a> then restart DoliWamp installation/upgrade.',mbInformation,MB_OK);
MsgBox('The package vcredist_x86.exe must have been installed first. It seems it is not. Please install it first from <a href="http://www.microsoft.com/en-us/download/details.aspx?id=30679">http://www.microsoft.com/en-us/download/details.aspx?id=30679</a> then restart DoliWamp installation/upgrade.',mbInformation,MB_OK);
end;
// Pb seems similar with msvcp110.dll
//vcredist_x64.exe
// If we have a new database version, we should only copy old my.ini file into new directory

View File

@@ -5,7 +5,7 @@
// during install process to be used.
//
//
$force_install_noedit=2;
$force_install_noedit=2; // 1=To block vars specific to distrib, 2 to block all technical parameters
$force_install_message='KeepDefaultValuesWamp';
$force_install_main_data_root='WAMPROOT/dolibarr_documents';
$force_install_type='mysqli';

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env php
<?php
/* Copyright (C) 2015 Laurent Destailleur <eldy@users.sourceforge.net>
/* Copyright (C) 2015-2017 Laurent Destailleur <eldy@users.sourceforge.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,11 +17,13 @@
*/
/**
* \file build/generate_filecheck_xml.php
* \file build/generate_filelist_xml.php
* \ingroup dev
* \brief This script create a xml checksum file
*/
if (! defined('NOREQUIREDB')) define('NOREQUIREDB','1'); // Do not create database handler $db
$sapi_type = php_sapi_name();
$script_file = basename(__FILE__);
$path=dirname(__FILE__).'/';
@@ -40,55 +42,128 @@ require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php");
* Main
*/
$includecustom=0;
$includeconstants=array();
if (empty($argv[1]))
{
print "Usage: ".$script_file." release=x.y.z\n";
print "Usage: ".$script_file." release=auto|x.y.z[-mybuild] [includecustom=1] [includeconstant=CC:MY_CONF_NAME:value]\n";
print "Example: ".$script_file." release=6.0.0 includecustom=1 includeconstant=FR:INVOICE_CAN_ALWAYS_BE_REMOVED:0 includeconstant=all:MAILING_NO_USING_PHPMAIL:1\n";
exit -1;
}
parse_str($argv[1]);
if ($release != DOL_VERSION)
$i=0;
while ($i < $argc)
{
print 'Error: release is not version declared into filefunc.in.php.'."\n";
exit -1;
if (! empty($argv[$i])) parse_str($argv[$i]);
if (preg_match('/includeconstant=/',$argv[$i]))
{
$tmp=explode(':', $includeconstant, 3);
if (count($tmp) != 3)
{
print "Error: Bad parameter includeconstant ".$includeconstant."\n";
exit -1;
}
$includeconstants[$tmp[0]][$tmp[1]] = $tmp[2];
}
$i++;
}
// If release is auto, we take current version
$tmpver=explode('-', $release, 2);
if ($tmpver[0] == 'auto')
{
$release=DOL_VERSION;
if ($tmpver[1]) $release.='-'.$tmpver[1];
}
if (empty($includecustom))
{
$tmpver=explode('-', $release, 2);
if (DOL_VERSION != $tmpver[0])
{
print 'Error: When parameter "includecustom" is not set and there is no suffix in release parameter, version declared into filefunc.in.php ('.DOL_VERSION.') must be exact same value than "release" parameter ('.$tmpver[0].')'."\n";
print "Usage: ".$script_file." release=x.y.z[-...] [includecustom=1]\n";
exit -1;
}
}
else
{
if (! preg_match('/'.preg_quote(DOL_VERSION,'/').'-/',$release))
{
print 'Error: When parameter "includecustom" is set, version declared into filefunc.inc.php ('.DOL_VERSION.') must be used with a suffix into "release" parmater (ex: '.DOL_VERSION.'-mydistrib).'."\n";
print "Usage: ".$script_file." release=x.y.z[-...] [includecustom=1]\n";
exit -1;
}
}
print "Release : ".$release."\n";
print "Include custom in signature : ".$includecustom."\n";
print "Include constants in signature : ";
foreach ($includeconstants as $countrycode => $tmp)
{
foreach($tmp as $constname => $constvalue)
{
print $constname.'='.$constvalue." ";
}
}
print "\n";
//$outputfile=dirname(__FILE__).'/../htdocs/install/filelist-'.$release.'.xml';
$outputdir=dirname(__FILE__).'/../htdocs/install';
$outputdir=dirname(dirname(__FILE__)).'/htdocs/install';
print 'Delete current files '.$outputdir.'/filelist*.xml'."\n";
dol_delete_file($outputdir.'/filelist*.xml',0,1,1);
$checksumconcat=array();
$outputfile=$outputdir.'/filelist-'.$release.'.xml';
$fp = fopen($outputfile,'w');
fputs($fp, '<?xml version="1.0" encoding="UTF-8" ?>'."\n");
fputs($fp, '<checksum_list version="'.$release.'">'."\n");
fputs($fp, '<checksum_list version="'.$release.'" date="'.dol_print_date(dol_now(), 'dayhourrfc').'" generator="'.$script_file.'">'."\n");
fputs($fp, '<dolibarr_htdocs_dir>'."\n");
foreach ($includeconstants as $countrycode => $tmp)
{
fputs($fp, '<dolibarr_constants country="'.$countrycode.'">'."\n");
foreach($tmp as $constname => $constvalue)
{
$valueforchecksum=(empty($constvalue)?'0':$constvalue);
$checksumconcat[]=$valueforchecksum;
fputs($fp, ' <constant name="'.$constname.'">'.$valueforchecksum.'</constant>'."\n");
}
fputs($fp, '</dolibarr_constants>'."\n");
}
$checksumconcat=array();
fputs($fp, '<dolibarr_htdocs_dir includecustom="'.$includecustom.'">'."\n");
$dir_iterator1 = new RecursiveDirectoryIterator(dirname(__FILE__).'/../htdocs/');
/*$dir_iterator1 = new RecursiveDirectoryIterator(dirname(__FILE__).'/../htdocs/');
$iterator1 = new RecursiveIteratorIterator($dir_iterator1);
// need to ignore document custom etc
$files = new RegexIterator($iterator1, '#^(?:[A-Z]:)?(?:/(?!(?:custom|documents|conf|install|nltechno))[^/]+)+/[^/]+\.(?:php|css|html|js|json|tpl|jpg|png|gif|sql|lang)$#i');
// 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');
*/
$regextoinclude='\.(php|css|html|js|json|tpl|jpg|png|gif|sql|lang)$';
$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');
$dir='';
$needtoclose=0;
foreach ($files as $file) {
$newdir = str_replace(dirname(__FILE__).'/../htdocs', '', dirname($file));
if ($newdir!=$dir) {
foreach ($files as $filetmp) {
$file = $filetmp['fullname'];
//$newdir = str_replace(dirname(__FILE__).'/../htdocs', '', dirname($file));
$newdir = str_replace(DOL_DOCUMENT_ROOT, '', dirname($file));
if ($newdir!=$dir) {
if ($needtoclose)
fputs($fp, '</dir>'."\n");
fputs($fp, '<dir name="'.$newdir.'" >'."\n");
fputs($fp, ' </dir>'."\n");
fputs($fp, ' <dir name="'.$newdir.'" >'."\n");
$dir = $newdir;
$needtoclose=1;
}
if (filetype($file)=="file") {
$md5=md5_file($file);
$checksumconcat[]=$md5;
fputs($fp, '<md5file name="'.basename($file).'">'.$md5.'</md5file>'."\n");
fputs($fp, ' <md5file name="'.basename($file).'">'.$md5.'</md5file>'."\n");
}
}
fputs($fp, '</dir>'."\n");
fputs($fp, ' </dir>'."\n");
fputs($fp, '</dolibarr_htdocs_dir>'."\n");
asort($checksumconcat); // Sort list of checksum
@@ -102,28 +177,36 @@ $checksumconcat=array();
fputs($fp, '<dolibarr_script_dir version="'.$release.'">'."\n");
$dir_iterator2 = new RecursiveDirectoryIterator(dirname(__FILE__).'/../scripts/');
// TODO Replace RecursiveDirectoryIterator with dol_dir_list
/*$dir_iterator2 = new RecursiveDirectoryIterator(dirname(__FILE__).'/../scripts/');
$iterator2 = new RecursiveIteratorIterator($dir_iterator2);
// need to ignore document custom etc
$files = new RegexIterator($iterator2, '#^(?:[A-Z]:)?(?:/(?!(?:custom|documents|conf|install|nltechno))[^/]+)+/[^/]+\.(?:php|css|html|js|json|tpl|jpg|png|gif|sql|lang)$#i');
// Need to ignore document custom etc. Note: this also ignore natively symbolic links.
$files = new RegexIterator($iterator2, '#^(?:[A-Z]:)?(?:/(?!(?: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)$';
$regextoexclude='(custom|documents|conf|install)$'; // Exclude dirs
$files = dol_dir_list(dirname(__FILE__).'/../scripts/', 'files', 1, $regextoinclude, $regextoexclude, 'fullname');
$dir='';
$needtoclose=0;
foreach ($files as $file) {
$newdir = str_replace(dirname(__FILE__).'/../scripts', '', dirname($file));
foreach ($files as $filetmp) {
$file = $filetmp['fullname'];
//$newdir = str_replace(dirname(__FILE__).'/../scripts', '', dirname($file));
$newdir = str_replace(DOL_DOCUMENT_ROOT, '', dirname($file));
$newdir = str_replace(dirname(__FILE__).'/../scripts', '', dirname($file));
if ($newdir!=$dir) {
if ($needtoclose)
fputs($fp, '</dir>'."\n");
fputs($fp, '<dir name="'.$newdir.'" >'."\n");
fputs($fp, ' </dir>'."\n");
fputs($fp, ' <dir name="'.$newdir.'" >'."\n");
$dir = $newdir;
$needtoclose=1;
}
if (filetype($file)=="file") {
$md5=md5_file($file);
$checksumconcat[]=$md5;
fputs($fp, '<md5file name="'.basename($file).'">'.$md5.'</md5file>'."\n");
fputs($fp, ' <md5file name="'.basename($file).'">'.$md5.'</md5file>'."\n");
}
}
fputs($fp, '</dir>'."\n");
fputs($fp, ' </dir>'."\n");
fputs($fp, '</dolibarr_script_dir>'."\n");
asort($checksumconcat); // Sort list of checksum

View File

@@ -19,7 +19,7 @@ use Term::ANSIColor;
# Change this to defined target for option 98 and 99
$PROJECT="dolibarr";
$PUBLISHSTABLE="eldy,dolibarr\@frs.sourceforge.net:/home/frs/project/dolibarr";
$PUBLISHBETARC="ldestailleur\@vmprod.dolibarr.org:/home/dolibarr/dolibarr.org/httpdocs/files";
$PUBLISHBETARC="dolibarr\@vmprod1.dolibarr.org:/home/dolibarr/dolibarr.org/httpdocs/files";
#@LISTETARGET=("TGZ","ZIP","RPM_GENERIC","RPM_FEDORA","RPM_MANDRIVA","RPM_OPENSUSE","DEB","APS","EXEDOLIWAMP","SNAPSHOT"); # Possible packages
@@ -334,7 +334,7 @@ foreach my $target (sort keys %CHOOSEDTARGET) {
}
foreach my $target (sort keys %CHOOSEDPUBLISH) {
if ($CHOOSEDPUBLISH{$target} < 0) { next; }
if ($target eq 'ASSO') { $nbofpublishneedchangelog++; $nbofpublishneedtag++; }
if ($target eq 'ASSO') { $nbofpublishneedchangelog++; }
if ($target eq 'SF') { $nbofpublishneedchangelog++; $nbofpublishneedtag++; }
$nboftargetok++;
}
@@ -594,7 +594,9 @@ if ($nboftargetok) {
print "Remove subdir of custom dir\n";
print "find $BUILDROOT/$PROJECT/htdocs/custom/* -type d -exec rm -fr {} \\;\n";
$ret=`find $BUILDROOT/$PROJECT/htdocs/custom/* -type d -exec rm -fr {} \\; >/dev/null 2>&1`; # For custom we want to keep dir
$ret=`find $BUILDROOT/$PROJECT/htdocs/custom/* -type d -exec rm -fr {} \\; >/dev/null 2>&1`; # For custom we want to keep files only
print "find $BUILDROOT/$PROJECT/htdocs/custom/* -type l -exec rm -fr {} \\;\n";
$ret=`find $BUILDROOT/$PROJECT/htdocs/custom/* -type l -exec rm -fr {} \\; >/dev/null 2>&1`; # For custom we want to keep files only
}
# Build package for each target

View File

@@ -1,7 +1,7 @@
<?php
$force_install_packager='rpmfedora';
$force_install_noedit=1; # 1 to block var specific to distrib, 2 to block every technical parameters
$force_install_noedit=1; // 1 to block var specific to distrib, 2 to block every technical parameters
$force_install_message='KeepDefaultValuesDeb';
$force_install_main_data_root='/var/lib/dolibarr/documents';
$force_install_type='mysqli';

View File

@@ -1,7 +1,7 @@
<?php
$force_install_packager='rpmgeneric';
$force_install_noedit=1; # 1 to block var specific to distrib, 2 to block every technical parameters
$force_install_noedit=1; // 1 to block var specific to distrib, 2 to block every technical parameters
$force_install_message='KeepDefaultValuesDeb';
$force_install_main_data_root='/var/lib/dolibarr/documents';
$force_install_type='mysqli';

View File

@@ -1,7 +1,7 @@
<?php
$force_install_packager='rpmmandriva';
$force_install_noedit=1; # 1 to block var specific to distrib, 2 to block every technical parameters
$force_install_noedit=1; // 1 to block var specific to distrib, 2 to block every technical parameters
$force_install_message='KeepDefaultValuesDeb';
$force_install_main_data_root='/var/lib/dolibarr/documents';
$force_install_type='mysqli';

View File

@@ -1,7 +1,7 @@
<?php
$force_install_packager='rpmopensuse';
$force_install_noedit=1; # 1 to block var specific to distrib, 2 to block every technical parameters
$force_install_noedit=1; // 1 to block var specific to distrib, 2 to block every technical parameters
$force_install_message='KeepDefaultValuesDeb';
$force_install_main_data_root='/var/lib/dolibarr/documents';
$force_install_type='mysqli';

View File

@@ -1129,7 +1129,7 @@ class BookKeeping extends CommonObject
global $user;
$error = 0;
$object = new Accountingbookkeeping($this->db);
$object = new BookKeeping($this->db);
$this->db->begin();

View File

@@ -169,9 +169,10 @@ if ($result) {
// Set accountancy code (for bank and thirdparty)
$compta_bank = $obj->account_number;
if ($obj->label == '(SupplierInvoicePayment)')
$compta_soc = 'NotDefined';
if ($obj->label == '(SupplierInvoicePayment)' || $obj->label == '(SupplierInvoicePaymentBack)')
$compta_soc = (! empty($obj->code_compta_fournisseur) ? $obj->code_compta_fournisseur : $account_supplier);
if ($obj->label == '(CustomerInvoicePayment)')
if ($obj->label == '(CustomerInvoicePayment)' || $obj->label == '(CustomerInvoicePaymentBack)')
$compta_soc = (! empty($obj->code_compta) ? $obj->code_compta : $account_customer);
$tabcompany[$obj->rowid] = array (
@@ -225,12 +226,12 @@ if ($result) {
$societestatic->id = $links[$key]['url_id'];
$societestatic->name = $links[$key]['label'];
$tabpay[$obj->rowid]["soclib"] = $societestatic->getNomUrl(1, '', 30);
$tabtp[$obj->rowid][$compta_soc] += $obj->amount;
if ($compta_soc) $tabtp[$obj->rowid][$compta_soc] += $obj->amount;
} else if ($links[$key]['type'] == 'user') {
$userstatic->id = $links[$key]['url_id'];
$userstatic->name = $links[$key]['label'];
$tabpay[$obj->rowid]["soclib"] = $userstatic->getNomUrl(1, '', 30);
$tabtp[$obj->rowid][$compta_user] += $obj->amount;
if ($compta_user) $tabtp[$obj->rowid][$compta_user] += $obj->amount;
} else if ($links[$key]['type'] == 'sc') {
$chargestatic->id = $links[$key]['url_id'];
$chargestatic->ref = $links[$key]['url_id'];
@@ -542,10 +543,10 @@ if ($action == 'export_csv') {
$date = dol_print_date($db->jdate($val["date"]), '%d%m%Y');
$reflabel = $val["ref"];
if ($reflabel == '(SupplierInvoicePayment)') {
if ($reflabel == '(SupplierInvoicePayment)' || $reflabel == '(SupplierInvoicePaymentBack)') {
$reflabel = $langs->trans('Supplier');
}
if ($reflabel == '(CustomerInvoicePayment)') {
if ($reflabel == '(CustomerInvoicePayment)' || $reflabel == '(CustomerInvoicePaymentBack)') {
$reflabel = $langs->trans('Customer');
}
if ($reflabel == '(SocialContributionPayment)') {
@@ -769,10 +770,10 @@ if (empty($action) || $action == 'view') {
$date = dol_print_date($db->jdate($val["date"]), 'day');
$reflabel = $val["ref"];
if ($reflabel == '(SupplierInvoicePayment)') {
if ($reflabel == '(SupplierInvoicePayment)' || $reflabel == '(SupplierInvoicePaymentBack)') {
$reflabel = $langs->trans('Supplier');
}
if ($reflabel == '(CustomerInvoicePayment)') {
if ($reflabel == '(CustomerInvoicePayment)' || $reflabel == '(CustomerInvoicePaymentBack)') {
$reflabel = $langs->trans('Customer');
}
if ($reflabel == '(SocialContributionPayment)') {

View File

@@ -198,6 +198,9 @@ class Adherent extends CommonObject
$infos.= $langs->transnoentities("Town").": ".$this->town."\n";
$infos.= $langs->transnoentities("Country").": ".$this->country."\n";
$infos.= $langs->transnoentities("EMail").": ".$this->email."\n";
$infos.= $langs->transnoentities("PhonePro").": ".$this->phone."\n";
$infos.= $langs->transnoentities("PhonePerso").": ".$this->phone_perso."\n";
$infos.= $langs->transnoentities("PhoneMobile").": ".$this->phone_mobile."\n";
if (empty($conf->global->ADHERENT_LOGIN_NOT_REQUIRED))
{
$infos.= $langs->transnoentities("Login").": ".$this->login."\n";
@@ -225,6 +228,10 @@ class Adherent extends CommonObject
'%PHOTO%'=>$msgishtml?dol_htmlentitiesbr($this->photo):$this->photo,
'%LOGIN%'=>$msgishtml?dol_htmlentitiesbr($this->login):$this->login,
'%PASSWORD%'=>$msgishtml?dol_htmlentitiesbr($this->pass):$this->pass,
'%TYPE%'=>$msgishtml?dol_htmlentitiesbr($this->type):$this->type,
'%PHONE_PRO%'=>$msgishtml?dol_htmlentitiesbr($this->phone):$this->phone,
'%PHONE_PERSO%'=>$msgishtml?dol_htmlentitiesbr($this->phone_perso):$this->phone_perso,
'%PHONE_MOBILE%'=>$msgishtml?dol_htmlentitiesbr($this->phone_mobile):$this->phone_mobile,
// For backward compatibility
'%INFOS%'=>$msgishtml?dol_htmlentitiesbr($infos):$infos,
'%SOCIETE%'=>$msgishtml?dol_htmlentitiesbr($this->societe):$this->societe,

View File

@@ -127,7 +127,7 @@ class AdherentType extends CommonObject
$sql.= "note = '".$this->db->escape($this->note)."',";
$sql.= "vote = '".$this->vote."',";
$sql.= "mail_valid = '".$this->db->escape($this->mail_valid)."'";
$sql .= " WHERE rowid =".$this->id;
$sql.= " WHERE rowid =".$this->id;
$result = $this->db->query($sql);
if ($result)
@@ -245,7 +245,7 @@ class AdherentType extends CommonObject
$sql = "SELECT rowid, libelle";
$sql.= " FROM ".MAIN_DB_PREFIX."adherent_type";
$sql.= " WHERE entity = ".$conf->entity;
$sql.= " WHERE entity IN (".getEntity('adherent').")";
$resql=$this->db->query($sql);
if ($resql)

View File

@@ -96,6 +96,7 @@ $fieldstosearchall = array(
'd.note_public'=>'NotePublic',
'd.note_private'=>'NotePrivate',
);
if($db->type == 'pgsql') unset($fieldstosearchall['d.rowid']);
$arrayfields=array(
'd.ref'=>array('label'=>$langs->trans("Ref"), 'checked'=>1),
'd.lastname'=>array('label'=>$langs->trans("Lastname"), 'checked'=>1),

View File

@@ -113,7 +113,6 @@ if ($action == 'confirm_create_thirdparty' && $confirm == 'yes' && $user->rights
if ($result < 0)
{
$langs->load("errors");
$errmsg=$langs->trans($company->error);
setEventMessages($company->error, $company->errors, 'errors');
}
else
@@ -123,7 +122,7 @@ if ($action == 'confirm_create_thirdparty' && $confirm == 'yes' && $user->rights
}
else
{
$errmsg=$object->error;
setEventMessages($object->error, $object->errors, 'errors');
}
}
@@ -211,7 +210,7 @@ if ($user->rights->adherent->cotisation->creer && $action == 'subscription' && !
{
$paymentdate=dol_mktime(0, 0, 0, $_POST["paymentmonth"], $_POST["paymentday"], $_POST["paymentyear"]);
}
$subscription=$_POST["subscription"]; // Amount of subscription
$subscription=price2num(GETPOST("subscription",'alpha')); // Amount of subscription
$label=$_POST["label"];
// Payment informations
@@ -229,6 +228,7 @@ if ($user->rights->adherent->cotisation->creer && $action == 'subscription' && !
$error++;
$langs->load("errors");
$errmsg=$langs->trans("ErrorBadDateFormat",$langs->transnoentitiesnoconv("DateSubscription"));
setEventMessages($errmsg, null, 'errors');
$action='addsubscription';
}
if (GETPOST('end') && ! $datesubend)
@@ -236,6 +236,7 @@ if ($user->rights->adherent->cotisation->creer && $action == 'subscription' && !
$error++;
$langs->load("errors");
$errmsg=$langs->trans("ErrorBadDateFormat",$langs->transnoentitiesnoconv("DateEndSubscription"));
setEventMessages($errmsg, null, 'errors');
$action='addsubscription';
}
if (! $datesubend)
@@ -246,16 +247,20 @@ if ($user->rights->adherent->cotisation->creer && $action == 'subscription' && !
{
$error++;
$errmsg=$langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("DatePayment"));
setEventMessages($errmsg, null, 'errors');
$action='addsubscription';
}
$amount = price2num(GETPOST("subscription",'alpha'));
// Check if a payment is mandatory or not
if (! $error && $adht->subscription) // Member type need subscriptions
{
if (! is_numeric($_POST["subscription"]))
if (! is_numeric($amount))
{
// If field is '' or not a numeric value
$errmsg=$langs->trans("ErrorFieldRequired",$langs->transnoentities("Amount"));
setEventMessages($errmsg, null, 'errors');
$error++;
$action='addsubscription';
}
@@ -273,7 +278,11 @@ if ($user->rights->adherent->cotisation->creer && $action == 'subscription' && !
{
if ($_POST["accountid"]) $errmsg=$langs->trans("ErrorDoNotProvideAccountsIfNullAmount");
}
if ($errmsg) $action='addsubscription';
if ($errmsg)
{
setEventMessages($errmsg, null, 'errors');
$action='addsubscription';
}
}
}
}
@@ -319,6 +328,7 @@ if ($user->rights->adherent->cotisation->creer && $action == 'subscription' && !
{
$error++;
$errmsg=$db->lasterror();
setEventMessages($errmsg, null, 'errors');
}
}
else
@@ -326,14 +336,16 @@ if ($user->rights->adherent->cotisation->creer && $action == 'subscription' && !
$error++;
$errmsg=$acct->error;
$errmsgs=$acct->errors;
}
setEventMessages($errmsg, $errmsgs, 'errors');
}
}
else
{
$error++;
$errmsg=$acct->error;
$errmsgs=$acct->errors;
}
setEventMessages($errmsg, $errmsgs, 'errors');
}
}
// If option choosed, we create invoice
@@ -351,6 +363,7 @@ if ($user->rights->adherent->cotisation->creer && $action == 'subscription' && !
{
$langs->load("errors");
$errmsg=$langs->trans("ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst");
setEventMessages($errmsg, null, 'errors');
$error++;
}
}
@@ -361,6 +374,7 @@ if ($user->rights->adherent->cotisation->creer && $action == 'subscription' && !
{
$errmsg=$customer->error;
$errmsgs=$acct->errors;
setEventMessages($errmsg, $errmsgs, 'errors');
$error++;
}
}
@@ -378,6 +392,7 @@ if ($user->rights->adherent->cotisation->creer && $action == 'subscription' && !
{
$error++;
$errmsg='ErrorNoPaymentTermRECEPFound';
setEventMessages($errmsg, null, 'errors');
}
}
$invoice->socid=$object->fk_soc;
@@ -395,6 +410,7 @@ if ($user->rights->adherent->cotisation->creer && $action == 'subscription' && !
{
$errmsg=$invoice->error;
$errmsgs=$invoice->errors;
setEventMessages($errmsg, $errmsgs, 'errors');
$error++;
}
}
@@ -415,6 +431,7 @@ if ($user->rights->adherent->cotisation->creer && $action == 'subscription' && !
if ($result <= 0)
{
$errmsg=$invoice->error;
setEventMessages($errmsg, null, 'errors');
$error++;
}
}
@@ -427,6 +444,7 @@ if ($user->rights->adherent->cotisation->creer && $action == 'subscription' && !
{
$errmsg=$invoice->error;
$errmsgs=$invoice->errors;
setEventMessages($errmsg, $errmsgs, 'errors');
$error++;
}
}
@@ -454,6 +472,7 @@ if ($user->rights->adherent->cotisation->creer && $action == 'subscription' && !
{
$errmsg=$paiement->error;
$errmsgs=$paiement->errors;
setEventMessages($errmsg, $errmsgs, 'errors');
$error++;
}
}
@@ -535,6 +554,7 @@ if ($user->rights->adherent->cotisation->creer && $action == 'subscription' && !
if ($result < 0)
{
$errmsg=$object->error;
setEventMessages($errmsg, null, 'errors');
}
}

View File

@@ -40,7 +40,7 @@ $action = GETPOST('action','alpha');
$value = GETPOST('value','alpha');
$param = GETPOST('param','alpha');
$cancel = GETPOST('cancel','alpha');
$scandir = GETPOST('scandir','alpha');
$scandir = GETPOST('scan_dir','alpha');
$type = 'action';
@@ -286,7 +286,7 @@ if ($conf->global->MAIN_FEATURES_LEVEL >= 2)
print '<td align="center">'."\n";
if ($conf->global->ACTION_EVENT_ADDON_PDF != "$name")
{
print '<a href="'.$_SERVER["PHP_SELF"].'?action=del&amp;value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'&amp;type=action">';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=del&amp;value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'&amp;type=action">';
print img_picto($langs->trans("Enabled"),'switch_on');
print '</a>';
}
@@ -299,7 +299,7 @@ if ($conf->global->MAIN_FEATURES_LEVEL >= 2)
else
{
print '<td align="center">'."\n";
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setmodel&amp;value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'&amp;type=action">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setmodel&amp;value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'&amp;type=action">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
print "</td>";
}
@@ -311,7 +311,7 @@ if ($conf->global->MAIN_FEATURES_LEVEL >= 2)
}
else
{
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&amp;value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'&amp;type=action"" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&amp;value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'&amp;type=action"" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
}
print '</td>';

View File

@@ -43,7 +43,7 @@ if (!$user->admin)
$action = GETPOST('action','alpha');
$value = GETPOST('value','alpha');
$label = GETPOST('label','alpha');
$scandir = GETPOST('scandir','alpha');
$scandir = GETPOST('scan_dir','alpha');
$type = 'bankaccount';
@@ -324,7 +324,7 @@ foreach ($dirmodels as $reldir)
print '</td>';
} else {
print '<td align="center">' . "\n";
print '<a href="' . $_SERVER["PHP_SELF"] . '?action=set&value=' . $name . '&amp;scandir=' . $module->scandir . '&amp;label=' . urlencode($module->name) . '">' . img_picto($langs->trans("Disabled"), 'switch_off') . '</a>';
print '<a href="' . $_SERVER["PHP_SELF"] . '?action=set&value=' . $name . '&amp;scan_dir=' . $module->scandir . '&amp;label=' . urlencode($module->name) . '">' . img_picto($langs->trans("Disabled"), 'switch_off') . '</a>';
print "</td>";
}
@@ -333,7 +333,7 @@ foreach ($dirmodels as $reldir)
if ($conf->global->BANKADDON_PDF == $name) {
print img_picto($langs->trans("Default"), 'on');
} else {
print '<a href="' . $_SERVER["PHP_SELF"] . '?action=setdoc&value=' . $name . '&amp;scandir=' . $module->scandir . '&amp;label=' . urlencode($module->name) . '" alt="' . $langs->trans("Default") . '">' . img_picto($langs->trans("Disabled"), 'off') . '</a>';
print '<a href="' . $_SERVER["PHP_SELF"] . '?action=setdoc&value=' . $name . '&amp;scan_dir=' . $module->scandir . '&amp;label=' . urlencode($module->name) . '" alt="' . $langs->trans("Default") . '">' . img_picto($langs->trans("Disabled"), 'off') . '</a>';
}
print '</td>';

View File

@@ -189,7 +189,7 @@ foreach ($dirmodels as $reldir)
}
else
{
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setmod&value='.preg_replace('/\.php$/','',$file).'&scandir='.$module->scandir.'&label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setmod&value='.preg_replace('/\.php$/','',$file).'&scan_dir='.$module->scandir.'&label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
}
print '</td>';

View File

@@ -45,7 +45,7 @@ if (! $user->admin) accessforbidden();
$action = GETPOST('action','alpha');
$value = GETPOST('value','alpha');
$label = GETPOST('label','alpha');
$scandir = GETPOST('scandir','alpha');
$scandir = GETPOST('scan_dir','alpha');
$type = 'order';
@@ -490,7 +490,7 @@ foreach ($dirmodels as $reldir)
else
{
print '<td align="center">'."\n";
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
print "</td>";
}
@@ -502,7 +502,7 @@ foreach ($dirmodels as $reldir)
}
else
{
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
}
print '</td>';

View File

@@ -36,7 +36,7 @@ if (!$user->admin) accessforbidden();
$action = GETPOST('action','alpha');
$value = GETPOST('value','alpha');
$label = GETPOST('label','alpha');
$scandir = GETPOST('scandir','alpha');
$scandir = GETPOST('scan_dir','alpha');
$type='contract';
if (empty($conf->global->CONTRACT_ADDON))
@@ -425,7 +425,7 @@ foreach ($dirmodels as $reldir)
else
{
print '<td align="center">'."\n";
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
print "</td>";
}
@@ -437,7 +437,7 @@ foreach ($dirmodels as $reldir)
}
else
{
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
}
print '</td>';

View File

@@ -44,7 +44,7 @@ if (! $user->admin)
$action=GETPOST('action','alpha');
$value=GETPOST('value','alpha');
$label = GETPOST('label','alpha');
$scandir = GETPOST('scandir','alpha');
$scandir = GETPOST('scan_dir','alpha');
$type='shipping';
if (empty($conf->global->EXPEDITION_ADDON_NUMBER))
@@ -291,7 +291,7 @@ foreach ($dirmodels as $reldir)
}
else
{
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setmodel&amp;value='.$file.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'">';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setmodel&amp;value='.$file.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'">';
print img_picto($langs->trans("Disabled"),'switch_off');
print '</a>';
}
@@ -432,7 +432,7 @@ foreach ($dirmodels as $reldir)
else
{
print '<td align="center">'."\n";
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
print "</td>";
}
@@ -444,7 +444,7 @@ foreach ($dirmodels as $reldir)
}
else
{
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
}
print '</td>';
@@ -470,7 +470,7 @@ foreach ($dirmodels as $reldir)
print '<td align="center">';
if ($module->type == 'pdf')
{
print '<a href="'.$_SERVER["PHP_SELF"].'?action=specimen&module='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'">'.img_object($langs->trans("Preview"),'sending').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=specimen&module='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'">'.img_object($langs->trans("Preview"),'sending').'</a>';
}
else
{

View File

@@ -43,7 +43,7 @@ if (! $user->admin) accessforbidden();
$action = GETPOST('action','alpha');
$value = GETPOST('value','alpha');
$label = GETPOST('label','alpha');
$scandir = GETPOST('scandir','alpha');
$scandir = GETPOST('scan_dir','alpha');
$type='expensereport';
@@ -423,7 +423,7 @@ foreach ($dirmodels as $reldir)
if (in_array($name, $def))
{
print "<td align=\"center\">\n";
print '<a href="'.$_SERVER["PHP_SELF"].'?action=del&amp;value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'">';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=del&amp;value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'">';
print img_picto($langs->trans("Enabled"),'switch_on');
print '</a>';
print "</td>";
@@ -431,7 +431,7 @@ foreach ($dirmodels as $reldir)
else
{
print "<td align=\"center\">\n";
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&amp;value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&amp;value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
print "</td>";
}
@@ -443,7 +443,7 @@ foreach ($dirmodels as $reldir)
}
else
{
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&amp;value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&amp;value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
}
print '</td>';

View File

@@ -43,7 +43,7 @@ if (! $user->admin) accessforbidden();
$action = GETPOST('action','alpha');
$value = GETPOST('value','alpha');
$label = GETPOST('label','alpha');
$scandir = GETPOST('scandir','alpha');
$scandir = GETPOST('scan_dir','alpha');
$type='ficheinter';
@@ -458,7 +458,7 @@ foreach ($dirmodels as $reldir)
if (in_array($name, $def))
{
print "<td align=\"center\">\n";
print '<a href="'.$_SERVER["PHP_SELF"].'?action=del&amp;value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'">';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=del&amp;value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'">';
print img_picto($langs->trans("Enabled"),'switch_on');
print '</a>';
print "</td>";
@@ -466,7 +466,7 @@ foreach ($dirmodels as $reldir)
else
{
print "<td align=\"center\">\n";
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&amp;value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&amp;value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
print "</td>";
}
@@ -478,7 +478,7 @@ foreach ($dirmodels as $reldir)
}
else
{
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&amp;value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&amp;value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
}
print '</td>';

View File

@@ -43,7 +43,7 @@ if (!$user->admin) accessforbidden();
$action = GETPOST('action','alpha');
$value = GETPOST('value','alpha');
$label = GETPOST('label','alpha');
$scandir = GETPOST('scandir','alpha');
$scandir = GETPOST('scan_dir','alpha');
$type='delivery';
/*
@@ -412,7 +412,7 @@ foreach ($dirmodels as $reldir)
if (in_array($name, $def))
{
print "<td align=\"center\">\n";
print '<a href="'.$_SERVER["PHP_SELF"].'?action=del&amp;value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'">';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=del&amp;value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'">';
print img_picto($langs->trans("Enabled"),'switch_on');
print '</a>';
print "</td>";
@@ -420,7 +420,7 @@ foreach ($dirmodels as $reldir)
else
{
print "<td align=\"center\">\n";
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&amp;value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&amp;value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
print "</td>";
}
@@ -432,7 +432,7 @@ foreach ($dirmodels as $reldir)
}
else
{
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&amp;value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&amp;value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
}
print '</td>';

View File

@@ -100,7 +100,7 @@ elseif ($action == 'update_currency')
if ($submit == $langs->trans('Modify'))
{
$fk_multicurrency = GETPOST('fk_multicurrency', 'int');
$rate = GETPOST('rate', 'float');
$rate = price2num(GETPOST('rate', 'alpha'));
$currency = new MultiCurrency($db);
if ($currency->fetch($fk_multicurrency) > 0)

View File

@@ -36,7 +36,7 @@ if (! $user->admin) accessforbidden();
$action = GETPOST('action','alpha');
$value = GETPOST('value','alpha');
$label = GETPOST('label','alpha');
$scandir = GETPOST('scandir','alpha');
$scandir = GETPOST('scan_dir','alpha');
$type='invoice';
if (empty($conf->global->PAYMENT_ADDON)) $conf->global->PAYMENT_ADDON = 'mod_payment_cicada.php';
@@ -201,7 +201,7 @@ foreach ($dirmodels as $reldir)
}
else
{
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setmod&value='.preg_replace('/\.php$/','',$file).'&scandir='.$module->scandir.'&label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setmod&value='.preg_replace('/\.php$/','',$file).'&scan_dir='.$module->scandir.'&label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
}
print '</td>';

View File

@@ -332,7 +332,7 @@ foreach ($dirmodels as $reldir)
else
{
print '<td align="center">'."\n";
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
print "</td>";
}
@@ -344,7 +344,7 @@ foreach ($dirmodels as $reldir)
}
else
{
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
}
print '</td>';

View File

@@ -42,7 +42,7 @@ if (! $user->admin) accessforbidden();
$action = GETPOST('action','alpha');
$value = GETPOST('value','alpha');
$label = GETPOST('label','alpha');
$scandir = GETPOST('scandir','alpha');
$scandir = GETPOST('scan_dir','alpha');
$type='propal';
/*
@@ -469,7 +469,7 @@ foreach ($dirmodels as $reldir)
else
{
print "<td align=\"center\">\n";
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&amp;value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&amp;value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
print "</td>";
}
@@ -481,7 +481,7 @@ foreach ($dirmodels as $reldir)
}
else
{
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&amp;value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&amp;value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
}
print '</td>';

View File

@@ -43,7 +43,7 @@ accessforbidden();
$type=GETPOST('type', 'alpha');
$value=GETPOST('value', 'alpha');
$action=GETPOST('action', 'alpha');
$scandir = GETPOST('scandir','alpha');
$scandir = GETPOST('scan_dir','alpha');
$specimenthirdparty=new Societe($db);
$specimenthirdparty->initAsSpecimen();
@@ -398,7 +398,7 @@ foreach ($dirmodels as $reldir)
//if ($conf->global->INVOICE_SUPPLIER_ADDON_PDF != "$name")
//{
// Even if choice is the default value, we allow to disable it: For supplier invoice, we accept to have no doc generation at all
print '<a href="'.$_SERVER["PHP_SELF"].'?action=del&amp;value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'&amp;type=invoice_supplier">';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=del&amp;value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'&amp;type=invoice_supplier">';
print img_picto($langs->trans("Enabled"),'switch_on');
print '</a>';
/*}
@@ -411,7 +411,7 @@ foreach ($dirmodels as $reldir)
else
{
print '<td align="center">'."\n";
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&amp;value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'&amp;type=invoice_supplier">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&amp;value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'&amp;type=invoice_supplier">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
print "</td>";
}
@@ -421,11 +421,11 @@ foreach ($dirmodels as $reldir)
{
//print img_picto($langs->trans("Default"),'on');
// Even if choice is the default value, we allow to disable it: For supplier invoice, we accept to have no doc generation at all
print '<a href="'.$_SERVER["PHP_SELF"].'?action=unsetdoc&amp;value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'&amp;type=invoice_supplier"" alt="'.$langs->trans("Disable").'">'.img_picto($langs->trans("Enabled"),'on').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=unsetdoc&amp;value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'&amp;type=invoice_supplier"" alt="'.$langs->trans("Disable").'">'.img_picto($langs->trans("Enabled"),'on').'</a>';
}
else
{
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&amp;value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'&amp;type=invoice_supplier"" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&amp;value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'&amp;type=invoice_supplier"" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
}
print '</td>';

View File

@@ -44,7 +44,7 @@ $type=GETPOST('type', 'alpha');
$value=GETPOST('value', 'alpha');
$label = GETPOST('label','alpha');
$action=GETPOST('action', 'alpha');
$scandir = GETPOST('scandir','alpha');
$scandir = GETPOST('scan_dir','alpha');
$specimenthirdparty=new Societe($db);
$specimenthirdparty->initAsSpecimen();
@@ -420,7 +420,7 @@ foreach ($dirmodels as $reldir)
print '<td align="center">'."\n";
if ($conf->global->COMMANDE_SUPPLIER_ADDON_PDF != "$name")
{
print '<a href="'.$_SERVER["PHP_SELF"].'?action=del&amp;value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'&amp;type=order_supplier">';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=del&amp;value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'&amp;type=order_supplier">';
print img_picto($langs->trans("Enabled"),'switch_on');
print '</a>';
}
@@ -433,7 +433,7 @@ foreach ($dirmodels as $reldir)
else
{
print '<td align="center">'."\n";
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&amp;value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'&amp;type=order_supplier">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&amp;value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'&amp;type=order_supplier">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
print "</td>";
}
@@ -445,7 +445,7 @@ foreach ($dirmodels as $reldir)
}
else
{
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&amp;value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'&amp;type=order_supplier"" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&amp;value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'&amp;type=order_supplier"" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
}
print '</td>';

View File

@@ -39,7 +39,7 @@ if (! $user->admin) accessforbidden();
$action = GETPOST('action','alpha');
$value = GETPOST('value','alpha');
$label = GETPOST('label','alpha');
$scandir = GETPOST('scandir','alpha');
$scandir = GETPOST('scan_dir','alpha');
/*
@@ -172,7 +172,7 @@ foreach ($dirmodels as $reldir)
}
else
{
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setmod&value='.preg_replace('/\.php$/','',$file).'&scandir='.$module->scandir.'&label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setmod&value='.preg_replace('/\.php$/','',$file).'&scan_dir='.$module->scandir.'&label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
}
print '</td>';

View File

@@ -37,7 +37,7 @@ if (! $user->admin) accessforbidden();
$action = GETPOST('action','alpha');
$value = GETPOST('value','alpha');
$label = GETPOST('label','alpha');
$scandir = GETPOST('scandir','alpha');
$scandir = GETPOST('scan_dir','alpha');
$type='supplier_proposal';
/*
@@ -446,7 +446,7 @@ foreach ($dirmodels as $reldir)
else
{
print "<td align=\"center\">\n";
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&amp;value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&amp;value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
print "</td>";
}
@@ -458,7 +458,7 @@ foreach ($dirmodels as $reldir)
}
else
{
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&amp;value='.$name.'&amp;scandir='.$module->scandir.'&amp;label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&amp;value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
}
print '</td>';

View File

@@ -88,6 +88,7 @@ if (!empty($ExecTimeLimit))
@set_time_limit($ExecTimeLimit); // Need more than 240 on Windows 7/64
error_reporting($err);
}
$MemoryLimit=0;
if (!empty($MemoryLimit))
{
@ini_set('memory_limit', $MemoryLimit);

View File

@@ -38,7 +38,7 @@ if (! $user->admin)
$form = new Form($db);
$title=$langs->trans("SystemToolsArea");
if (GETPOST('leftmenu') == 'admintools') $title=$langs->trans("ModulesSystemTools");
if (GETPOST('leftmenu',"aZ09") == 'admintools') $title=$langs->trans("ModulesSystemTools");
llxHeader('', $title);

View File

@@ -1,5 +1,6 @@
<?php
/* Copyright (C) 2014-2015 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2018 Ferran Marcet <fmarcet@2byte.es>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -143,7 +144,7 @@ if ($action == 'initbarcodeproducts')
$nextvalue=$modBarCodeProduct->getNextValue($productstatic,'');
//print 'Set value '.$nextvalue.' to product '.$productstatic->id." ".$productstatic->ref." ".$productstatic->type."<br>\n";
$result=$productstatic->setValueFrom('barcode', $nextvalue, '', '', 'date', '', $user, 'PRODUCT_MODIFY');
$result=$productstatic->setValueFrom('barcode', $nextvalue, '', '', 'text', '', $user, 'PRODUCT_MODIFY');
$nbtry++;
if ($result > 0) $nbok++;

View File

@@ -40,7 +40,7 @@ function printBookmarksList($aDb, $aLangs)
$langs->load("bookmarks");
$url= $_SERVER["PHP_SELF"].(! empty($_SERVER["QUERY_STRING"])?'?'.$_SERVER["QUERY_STRING"]:'');
$url= $_SERVER["PHP_SELF"].(dol_escape_htmltag($_SERVER["QUERY_STRING"])?'?'.dol_escape_htmltag($_SERVER["QUERY_STRING"]):'');
$ret = '';
// Menu bookmark

View File

@@ -1,6 +1,7 @@
<?php
/* Copyright (C) 2007-2008 Jeremie Ollivier <jeremie.o@laposte.net>
* Copyright (C) 2008-2010 Laurent Destailleur <eldy@uers.sourceforge.net>
* Copyright (C) 2018 Juanjo Menent <jmenent@2byte.es>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -145,7 +146,8 @@ switch (GETPOST('action','alpha'))
$obj_facturation->id($ret['rowid']);
$obj_facturation->ref($ret['ref']);
$obj_facturation->stock($ret['reel']);
$obj_facturation->prix($ret['price']);
//$obj_facturation->prix($ret['price']);
$obj_facturation->prix($pu_ht);
$vatrate = $tva_tx;

View File

@@ -1163,11 +1163,11 @@ class Categorie extends CommonObject
*/
if($obj[0] > 0 && $obj[0] != $this->id)
{
dol_syslog(get_class($this)."::already_exists category with name=".$this->label." exist rowid=".$obj[0]." current_id=".$this->id, LOG_DEBUG);
dol_syslog(get_class($this)."::already_exists category with name=".$this->label." and parent ".$this->fk_parent." exists: rowid=".$obj[0]." current_id=".$this->id, LOG_DEBUG);
return 1;
}
}
dol_syslog(get_class($this)."::already_exists no category with same name=".$this->label." rowid=".$obj[0]." current_id=".$this->id, LOG_DEBUG);
dol_syslog(get_class($this)."::already_exists no category with same name=".$this->label." and same parent ".$this->fk_parent.": rowid=".$obj[0]." current_id=".$this->id, LOG_DEBUG);
return 0;
}
else

View File

@@ -1,12 +1,12 @@
<?php
/* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2016 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005 Simon TOSSER <simon@kornog-computing.com>
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2010-2013 Juanjo Menent <jmenent@2byte.es>
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
* Copyright (C) 2014 Cedric GROSS <c.gross@kreiz-it.fr>
* Copyright (C) 2015 Alexandre Spangaro <aspangaro.dolibarr@gmail.com>
/* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2016 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005 Simon TOSSER <simon@kornog-computing.com>
* Copyright (C) 2005-2017 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2010-2013 Juanjo Menent <jmenent@2byte.es>
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
* Copyright (C) 2014 Cedric GROSS <c.gross@kreiz-it.fr>
* Copyright (C) 2015 Alexandre Spangaro <aspangaro.dolibarr@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -572,6 +572,11 @@ if ($action == 'mupdate')
}
// Actions to delete doc
$upload_dir = $conf->agenda->dir_output.'/'.dol_sanitizeFileName($object->ref);
$permissioncreate = ($user->rights->agenda->allactions->delete || (($object->authorid == $user->id || $object->userownerid == $user->id) && $user->rights->agenda->myactions->delete));
include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php';
/*
* View
@@ -1449,7 +1454,7 @@ if ($id > 0)
*/
$filedir=$conf->agenda->multidir_output[$conf->entity].'/'.$object->id;
$urlsource=$_SERVER["PHP_SELF"]."?socid=".$object->id;
$urlsource=$_SERVER["PHP_SELF"]."?id=".$object->id;
$genallowed=$user->rights->agenda->myactions->create;
$delallowed=$user->rights->agenda->myactions->delete;

View File

@@ -2,8 +2,8 @@
/* Copyright (C) 2002-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2011 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2011 Juanjo Menent <jmenent@2byte.es>
* Copyright (C) 2015 Marcos García <marcosgdf@gmail.com>
* Copyright (C) 2011-2017 Juanjo Menent <jmenent@2byte.es>
* Copyright (C) 2015 Marcos García <marcosgdf@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -1317,6 +1317,7 @@ class ActionComm extends CommonObject
{
// Note: Output of sql request is encoded in $conf->file->character_set_client
// This assignment in condition is not a bug. It allows walking the results.
$diff = 0;
while ($obj=$this->db->fetch_object($resql))
{
$qualified=true;
@@ -1351,8 +1352,9 @@ class ActionComm extends CommonObject
if ($qualified && $datestart)
{
$eventarray[$datestart]=$event;
$eventarray[$datestart+$diff]=$event;
}
$diff++;
}
}
else

View File

@@ -474,7 +474,7 @@ class AdvanceTargetingMailing extends CommonObject
$sql.= " LEFT OUTER JOIN " . MAIN_DB_PREFIX . "societe_commerciaux as saleman ON saleman.fk_soc=t.rowid ";
}
if (array_key_exists('cust_categ', $arrayquery)) {
$sql.= " LEFT OUTER JOIN " . MAIN_DB_PREFIX . "categorie_societe as custcateg ON custcateg.fk_societe=t.rowid ";
$sql.= " LEFT OUTER JOIN " . MAIN_DB_PREFIX . "categorie_societe as custcateg ON custcateg.fk_soc=t.rowid ";
}
if (!empty($arrayquery['cust_name'])) {

View File

@@ -74,6 +74,7 @@ $originid = GETPOST('originid', 'int');
$confirm = GETPOST('confirm', 'alpha');
$lineid = GETPOST('lineid', 'int');
$contactid = GETPOST('contactid','int');
$projectid = GETPOST('projectid','int');
// PDF
$hidedetails = (GETPOST('hidedetails', 'int') ? GETPOST('hidedetails', 'int') : (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS) ? 1 : 0));
@@ -844,13 +845,33 @@ if (empty($reshook))
// Add custom code and origin country into description
if (empty($conf->global->MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE) && (! empty($prod->customcode) || ! empty($prod->country_code)))
{
$tmptxt = '(';
if (! empty($prod->customcode))
$tmptxt .= $langs->transnoentitiesnoconv("CustomCode") . ': ' . $prod->customcode;
if (! empty($prod->customcode) && ! empty($prod->country_code))
$tmptxt .= ' - ';
if (! empty($prod->country_code))
$tmptxt .= $langs->transnoentitiesnoconv("CountryOrigin") . ': ' . getCountry($prod->country_code, 0, $db, $langs, 0);
// Define output language
if (! empty($conf->global->MAIN_MULTILANGS) && ! empty($conf->global->PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE)) {
$outputlangs = $langs;
$newlang = '';
if (empty($newlang) && GETPOST('lang_id','alpha'))
$newlang = GETPOST('lang_id','alpha');
if (empty($newlang))
$newlang = $object->thirdparty->default_lang;
if (! empty($newlang)) {
$outputlangs = new Translate("", $conf);
$outputlangs->setDefaultLang($newlang);
$outputlangs->load('products');
}
if (! empty($prod->customcode))
$tmptxt .= $outputlangs->transnoentitiesnoconv("CustomCode") . ': ' . $prod->customcode;
if (! empty($prod->customcode) && ! empty($prod->country_code))
$tmptxt .= ' - ';
if (! empty($prod->country_code))
$tmptxt .= $outputlangs->transnoentitiesnoconv("CountryOrigin") . ': ' . getCountry($prod->country_code, 0, $db, $outputlangs, 0);
} else {
if (! empty($prod->customcode))
$tmptxt .= $langs->transnoentitiesnoconv("CustomCode") . ': ' . $prod->customcode;
if (! empty($prod->customcode) && ! empty($prod->country_code))
$tmptxt .= ' - ';
if (! empty($prod->country_code))
$tmptxt .= $langs->transnoentitiesnoconv("CountryOrigin") . ': ' . getCountry($prod->country_code, 0, $db, $langs, 0);
}
$tmptxt .= ')';
$desc = dol_concatdesc($desc, $tmptxt);
}
@@ -1290,7 +1311,7 @@ if ($action == 'create')
}
$objectsrc->fetch_thirdparty();
$projectid = (! empty($objectsrc->fk_project) ? $objectsrc->fk_project : '');
$projectid = (! empty($objectsrc->fk_project) ? $objectsrc->fk_project : 0);
$ref_client = (! empty($objectsrc->ref_client) ? $objectsrc->ref_client : '');
$ref_int = (! empty($objectsrc->ref_int) ? $objectsrc->ref_int : '');
@@ -1458,9 +1479,6 @@ if ($action == 'create')
// Project
if (! empty($conf->projet->enabled) && $socid > 0)
{
$projectid = GETPOST('projectid')?GETPOST('projectid'):0;
if ($origin == 'project') $projectid = ($originid ? $originid : 0);
$langs->load("projects");
print '<tr>';
print '<td>' . $langs->trans("Project") . '</td><td colspan="2">';
@@ -2239,7 +2257,7 @@ if ($action == 'create')
// Show object lines
$result = $object->getLinesArray();
print ' <form name="addproduct" id="addproduct" action="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . (($action != 'editline') ? '#add' : '#line_' . GETPOST('lineid')) . '" method="POST">
print ' <form name="addproduct" id="addproduct" action="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . (($action != 'editline') ? '#addline' : '#line_' . GETPOST('lineid')) . '" method="POST">
<input type="hidden" name="token" value="' . $_SESSION ['newtoken'] . '">
<input type="hidden" name="action" value="' . (($action != 'editline') ? 'addline' : 'updateligne') . '">
<input type="hidden" name="mode" value="">

View File

@@ -1,6 +1,6 @@
<?php
/* Copyright (C) 2003-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2009 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2004-2017 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005 Marc Barilley / Ocebo <marc@ocebo.com>
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2013 Cédric Salvador <csalvador@gpcsolutions.fr>
@@ -63,17 +63,18 @@ if (! $sortfield) $sortfield="name";
$object = new Propal($db);
$object->fetch($id,$ref);
if ($object->id > 0)
{
$object->fetch_thirdparty();
$upload_dir = $conf->propal->dir_output.'/'.dol_sanitizeFileName($object->ref);
include_once DOL_DOCUMENT_ROOT . '/core/actions_linkedfiles.inc.php';
}
/*
* Actions
*/
if ($object->id > 0)
{
$object->fetch_thirdparty();
$upload_dir = $conf->propal->dir_output.'/'.dol_sanitizeFileName($object->ref);
include_once DOL_DOCUMENT_ROOT . '/core/actions_linkedfiles.inc.php';
}
/*

View File

@@ -73,9 +73,9 @@ $search_zip=GETPOST('search_zip','alpha');
$search_state=trim(GETPOST("search_state"));
$search_country=GETPOST("search_country",'int');
$search_type_thirdparty=GETPOST("search_type_thirdparty",'int');
$viewstatut=GETPOST('viewstatut');
$viewstatut=GETPOST('viewstatut','alpha');
$optioncss = GETPOST('optioncss','alpha');
$object_statut=GETPOST('propal_statut');
$object_statut=GETPOST('propal_statut','alpha');
$sall=GETPOST('sall', 'alphanohtml');
$mesg=(GETPOST("msg") ? GETPOST("msg") : GETPOST("mesg"));
@@ -273,25 +273,25 @@ if (! $user->rights->societe->client->voir && ! $socid) //restriction
$sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
}
if ($search_town) $sql.= natural_search('s.town', $search_town);
if ($search_zip) $sql.= natural_search("s.zip",$search_zip);
if ($search_state) $sql.= natural_search("state.nom",$search_state);
if ($search_country) $sql .= " AND s.fk_pays IN (".$search_country.')';
if ($search_type_thirdparty) $sql .= " AND s.fk_typent IN (".$search_type_thirdparty.')';
if ($search_ref) $sql .= natural_search('p.ref', $search_ref);
if ($search_zip) $sql.= natural_search("s.zip", $search_zip);
if ($search_state) $sql.= natural_search("state.nom", $search_state);
if ($search_country) $sql .= " AND s.fk_pays IN (".$db->escape($search_country).')';
if ($search_type_thirdparty) $sql .= " AND s.fk_typent IN (".$db->escape($search_type_thirdparty).')';
if ($search_ref) $sql .= natural_search('p.ref', $search_ref);
if ($search_refcustomer) $sql .= natural_search('p.ref_client', $search_refcustomer);
if ($search_societe) $sql .= natural_search('s.nom', $search_societe);
if ($search_login) $sql.= " AND u.login LIKE '%".$db->escape(trim($search_login))."%'";
if ($search_societe) $sql .= natural_search('s.nom', $search_societe);
if ($search_login) $sql .= natural_search("u.login", $search_login);
if ($search_montant_ht != '') $sql.= natural_search("p.total_ht", $search_montant_ht, 1);
if ($search_montant_vat != '') $sql.= natural_search("p.tva", $search_montant_vat, 1);
if ($search_montant_ttc != '') $sql.= natural_search("p.total", $search_montant_ttc, 1);
if ($sall) {
$sql .= natural_search(array_keys($fieldstosearchall), $sall);
}
if ($search_product_category > 0) $sql.=" AND cp.fk_categorie = ".$search_product_category;
if ($search_product_category > 0) $sql.=" AND cp.fk_categorie = ".$db->escape($search_product_category);
if ($socid > 0) $sql.= ' AND s.rowid = '.$socid;
if ($viewstatut != '' && $viewstatut != '-1')
{
$sql.= ' AND p.fk_statut IN ('.$viewstatut.')';
$sql.= ' AND p.fk_statut IN ('.$db->escape($viewstatut).')';
}
if ($month > 0)
{
@@ -300,16 +300,16 @@ if ($month > 0)
else if ($year > 0 && ! empty($day))
$sql.= " AND p.datep BETWEEN '".$db->idate(dol_mktime(0, 0, 0, $month, $day, $year))."' AND '".$db->idate(dol_mktime(23, 59, 59, $month, $day, $year))."'";
else
$sql.= " AND date_format(p.datep, '%m') = '".$month."'";
$sql.= " AND date_format(p.datep, '%m') = '".$db->escape($month)."'";
}
else if ($year > 0)
{
$sql.= " AND p.datep BETWEEN '".$db->idate(dol_get_first_day($year,1,false))."' AND '".$db->idate(dol_get_last_day($year,12,false))."'";
}
if ($search_sale > 0) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$search_sale;
if ($search_sale > 0) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$db->escape($search_sale);
if ($search_user > 0)
{
$sql.= " AND c.fk_c_type_contact = tc.rowid AND tc.element='propal' AND tc.source='internal' AND c.element_id = p.rowid AND c.fk_socpeople = ".$search_user;
$sql.= " AND c.fk_c_type_contact = tc.rowid AND tc.element='propal' AND tc.source='internal' AND c.element_id = p.rowid AND c.fk_socpeople = ".$db->escape($search_user);
}
// Add where from extra fields
foreach ($search_array_options as $key => $val)
@@ -353,6 +353,7 @@ if ($resql)
$soc = new Societe($db);
$soc->fetch($socid);
$title = $langs->trans('ListOfProposals') . ' - '.$soc->name;
if (empty($search_societe)) $search_societe = $soc->name;
}
else
{
@@ -363,22 +364,22 @@ if ($resql)
$arrayofselected=is_array($toselect)?$toselect:array();
$param='&viewstatut='.$viewstatut;
if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage;
if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit;
if ($sall) $param.='&sall='.$sall;
if ($month) $param.='&month='.$month;
if ($year) $param.='&year='.$year;
if ($search_ref) $param.='&search_ref=' .$search_ref;
if ($search_refcustomer) $param.='&search_refcustomer=' .$search_refcustomer;
if ($search_societe) $param.='&search_societe=' .$search_societe;
if ($search_user > 0) $param.='&search_user='.$search_user;
if ($search_sale > 0) $param.='&search_sale='.$search_sale;
if ($search_montant_ht) $param.='&search_montant_ht='.$search_montant_ht;
if ($search_login) $param.='&search_login='.$search_login;
if ($search_town) $param.='&search_town='.$search_town;
if ($socid > 0) $param.='&socid='.$socid;
if ($optioncss != '') $param.='&optioncss='.$optioncss;
$param='&viewstatut='.urlencode($viewstatut);
if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.urlencode($contextpage);
if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit);
if ($sall) $param.='&sall='.urlencode($sall);
if ($month) $param.='&month='.urlencode($month);
if ($year) $param.='&year='.urlencode($year);
if ($search_ref) $param.='&search_ref='.urlencode($search_ref);
if ($search_refcustomer) $param.='&search_refcustomer='.urlencode($search_refcustomer);
if ($search_societe) $param.='&search_societe='.urlencode($search_societe);
if ($search_user > 0) $param.='&search_user='.urlencode($search_user);
if ($search_sale > 0) $param.='&search_sale='.urlencode($search_sale);
if ($search_montant_ht) $param.='&search_montant_ht='.urlencode($search_montant_ht);
if ($search_login) $param.='&search_login='.urlencode($search_login);
if ($search_town) $param.='&search_town='.urlencode($search_town);
if ($socid > 0) $param.='&socid='.urlencode($socid);
if ($optioncss != '') $param.='&optioncss='.urlencode($optioncss);
// Add $param from extra fields
foreach ($search_array_options as $key => $val)
{

View File

@@ -782,8 +782,8 @@ if (empty($reshook))
if (! empty($conf->global->MAIN_MULTILANGS) && ! empty($conf->global->PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE)) {
$outputlangs = $langs;
$newlang = '';
if (empty($newlang) && GETPOST('lang_id'))
$newlang = GETPOST('lang_id');
if (empty($newlang) && GETPOST('lang_id','alpha'))
$newlang = GETPOST('lang_id','alpha');
if (empty($newlang))
$newlang = $object->thirdparty->default_lang;
if (! empty($newlang)) {
@@ -801,12 +801,33 @@ if (empty($reshook))
// Add custom code and origin country into description
if (empty($conf->global->MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE) && (! empty($prod->customcode) || ! empty($prod->country_code))) {
$tmptxt = '(';
if (! empty($prod->customcode))
$tmptxt .= $langs->transnoentitiesnoconv("CustomCode") . ': ' . $prod->customcode;
if (! empty($prod->customcode) && ! empty($prod->country_code))
$tmptxt .= ' - ';
if (! empty($prod->country_code))
$tmptxt .= $langs->transnoentitiesnoconv("CountryOrigin") . ': ' . getCountry($prod->country_code, 0, $db, $langs, 0);
// Define output language
if (! empty($conf->global->MAIN_MULTILANGS) && ! empty($conf->global->PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE)) {
$outputlangs = $langs;
$newlang = '';
if (empty($newlang) && GETPOST('lang_id','alpha'))
$newlang = GETPOST('lang_id','alpha');
if (empty($newlang))
$newlang = $object->thirdparty->default_lang;
if (! empty($newlang)) {
$outputlangs = new Translate("", $conf);
$outputlangs->setDefaultLang($newlang);
$outputlangs->load('products');
}
if (! empty($prod->customcode))
$tmptxt .= $outputlangs->transnoentitiesnoconv("CustomCode") . ': ' . $prod->customcode;
if (! empty($prod->customcode) && ! empty($prod->country_code))
$tmptxt .= ' - ';
if (! empty($prod->country_code))
$tmptxt .= $outputlangs->transnoentitiesnoconv("CountryOrigin") . ': ' . getCountry($prod->country_code, 0, $db, $outputlangs, 0);
} else {
if (! empty($prod->customcode))
$tmptxt .= $langs->transnoentitiesnoconv("CustomCode") . ': ' . $prod->customcode;
if (! empty($prod->customcode) && ! empty($prod->country_code))
$tmptxt .= ' - ';
if (! empty($prod->country_code))
$tmptxt .= $langs->transnoentitiesnoconv("CountryOrigin") . ': ' . getCountry($prod->country_code, 0, $db, $langs, 0);
}
$tmptxt .= ')';
$desc = dol_concatdesc($desc, $tmptxt);
}
@@ -1513,7 +1534,7 @@ if ($action == 'create' && $user->rights->commande->creer)
print '</td>';
} else {
print '<td colspan="2">';
print $form->select_company('', 'socid', 's.client = 1 OR s.client = 3', 'SelectThirdParty');
print $form->select_company('', 'socid', '(s.client = 1 OR s.client = 3)', 'SelectThirdParty');
// reload page to retrieve customer informations
if (!empty($conf->global->RELOAD_PAGE_ON_CUSTOMER_CHANGE))
{
@@ -2084,7 +2105,7 @@ if ($action == 'create' && $user->rights->commande->creer)
print '</form>';
} else {
print $object->date ? dol_print_date($object->date, 'day') : '&nbsp;';
if ($object->hasDelay() && empty($object->date_livraison)) {
if ($object->hasDelay() && ! empty($object->date_livraison)) {
print ' '.img_picto($langs->trans("Late").' : '.$object->showDelay(), "warning");
}
}
@@ -2433,7 +2454,7 @@ if ($action == 'create' && $user->rights->commande->creer)
*/
$result = $object->getLinesArray();
print ' <form name="addproduct" id="addproduct" action="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . (($action != 'editline') ? '#add' : '#line_' . GETPOST('lineid')) . '" method="POST">
print ' <form name="addproduct" id="addproduct" action="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . (($action != 'editline') ? '#addline' : '#line_' . GETPOST('lineid')) . '" method="POST">
<input type="hidden" name="token" value="' . $_SESSION ['newtoken'] . '">
<input type="hidden" name="action" value="' . (($action != 'editline') ? 'addline' : 'updateline') . '">
<input type="hidden" name="mode" value="">
@@ -2541,7 +2562,7 @@ if ($action == 'create' && $user->rights->commande->creer)
if (! empty($conf->expedition->enabled)) {
$numshipping = $object->nb_expedition();
if ($object->statut > Commande::STATUS_DRAFT && $object->statut < Commande::STATUS_CLOSED && $object->getNbOfProductsLines() > 0) {
if ($object->statut > Commande::STATUS_DRAFT && $object->statut < Commande::STATUS_CLOSED && ($object->getNbOfProductsLines() > 0 || !empty($conf->global->STOCK_SUPPORTS_SERVICES))) {
if (($conf->expedition_bon->enabled && $user->rights->expedition->creer) || ($conf->livraison_bon->enabled && $user->rights->expedition->livraison->creer)) {
if ($user->rights->expedition->creer) {
print '<div class="inline-block divButAction"><a class="butAction" href="' . DOL_URL_ROOT . '/expedition/shipment.php?id=' . $object->id . '">' . $langs->trans('CreateShipment') . '</a></div>';

View File

@@ -1360,10 +1360,10 @@ class Commande extends CommonOrder
$this->line->vat_src_code=$vat_src_code;
$this->line->tva_tx=$txtva;
$this->line->localtax1_tx=$txlocaltax1;
$this->line->localtax2_tx=$txlocaltax2;
$this->line->localtax1_type = $localtaxes_type[0];
$this->line->localtax2_type = $localtaxes_type[2];
$this->line->localtax1_tx=$localtaxes_type[1];
$this->line->localtax2_tx=$localtaxes_type[3];
$this->line->localtax1_type=$localtaxes_type[0];
$this->line->localtax2_type=$localtaxes_type[2];
$this->line->fk_product=$fk_product;
$this->line->product_type=$product_type;
$this->line->fk_remise_except=$fk_remise_except;
@@ -1412,7 +1412,7 @@ class Commande extends CommonOrder
if (! empty($fk_parent_line)) $this->line_order(true,'DESC');
// Mise a jour informations denormalisees au niveau de la commande meme
$result=$this->update_price(1,'auto'); // This method is designed to add line from user input so total calculation must be done using 'auto' mode.
$result=$this->update_price(1,'auto',0,$mysoc); // This method is designed to add line from user input so total calculation must be done using 'auto' mode.
if ($result > 0)
{
$this->db->commit();

View File

@@ -578,6 +578,7 @@ if ($resql)
$soc = new Societe($db);
$soc->fetch($socid);
$title = $langs->trans('ListOfOrders') . ' - '.$soc->name;
if (empty($search_company)) $search_company = $soc->name;
}
else
{
@@ -829,7 +830,7 @@ if ($resql)
$moreforfilter.='<div class="divsearchfield">';
$moreforfilter.=$langs->trans('IncludingProductWithTag'). ': ';
$cate_arbo = $form->select_all_categories(Categorie::TYPE_PRODUCT, null, 'parent', null, null, 1);
$moreforfilter.=$form->selectarray('search_product_category', $cate_arbo, $search_product_category, 1, 0, 0, '', 0, 0, 0, 0, '', 1);
$moreforfilter.=$form->selectarray('search_product_category', $cate_arbo, $search_product_category, 1, 0, 0, '', 0, 0, 0, 0, 'maxwidth300', 1);
$moreforfilter.='</div>';
}
$parameters=array();

View File

@@ -5,7 +5,7 @@
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2012 Andreu Bisquerra Gaya <jove@bisquerra.com>
* Copyright (C) 2012 David Rodriguez Martinez <davidrm146@gmail.com>
* Copyright (C) 2012-2017 Juanjo Menent <jmenent@2byte.es>
* Copyright (C) 2012-2018 Juanjo Menent <jmenent@2byte.es>
* Copyright (C) 2015 Ferran Marcet <fmarcet@2byte.es>
*
* This program is free software; you can redistribute it and/or modify
@@ -285,6 +285,13 @@ if (($action == 'create' || $action == 'add') && !$error)
{
$fk_parent_line = 0;
}
// Extrafields
if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED) && method_exists($lines[$i], 'fetch_optionals')) {
$lines[$i]->fetch_optionals($lines[$i]->rowid);
$array_options = $lines[$i]->array_options;
}
$result = $object->addline(
$desc,
$lines[$i]->subprice,
@@ -309,7 +316,8 @@ if (($action == 'create' || $action == 'add') && !$error)
$fk_parent_line,
$lines[$i]->fk_fournprice,
$lines[$i]->pa_ht,
$lines[$i]->label
$lines[$i]->label,
$array_options
);
if ($result > 0)
{

View File

@@ -102,12 +102,12 @@ $sortorder = GETPOST("sortorder",'alpha');
$page = GETPOST("page",'int');
$pageplusone = GETPOST("pageplusone",'int');
if ($pageplusone) $page = $pageplusone - 1;
if ($page == -1) { $page = 0; }
if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1
$offset = $limit * $page;
$pageprev = $page - 1;
$pagenext = $page + 1;
if (! $sortorder) $sortorder='ASC';
if (! $sortfield) $sortfield='b.datev';
if (! $sortfield) $sortfield='b.datev, b.dateo, b.rowid';
$mode_balance_ok=false;
//if (($sortfield == 'b.datev' || $sortfield == 'b.datev, b.dateo, b.rowid')) // TODO Manage balance when account not selected
@@ -130,7 +130,7 @@ if ($id > 0 || ! empty($ref))
$contextpage='banktransactionlist'.(empty($object->ref)?'':'-'.$object->id);
//var_dump($contextpage);
// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array
// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array array
$hookmanager->initHooks(array('banktransactionlist', $contextpage));
$extrafields = new ExtraFields($db);
@@ -372,6 +372,8 @@ if (dol_strlen($search_dv_end) > 0) $param .= '&search_end_dvmonth=' . GETPOST
if ($search_req_nb) $param.='&amp;req_nb='.urlencode($search_req_nb);
if (GETPOST("thirdparty")) $param.='&amp;thirdparty='.urlencode(GETPOST("thirdparty"));
if ($optioncss != '') $param.='&optioncss='.$optioncss;
if(!empty($search_conciliated) || $search_conciliated === 0) $param.='&search_conciliated='.$search_conciliated;
// Add $param from extra fields
foreach ($search_array_options as $key => $val)
{
@@ -433,7 +435,7 @@ if ($id > 0 || ! empty($ref))
if ($object->canBeConciliated() > 0) {
// If not cash account and can be reconciliate
if ($user->rights->banque->consolidate) {
print '<a class="butAction" href="'.DOL_URL_ROOT.'/compta/bank/bankentries.php?action=reconcile'.$param.'">'.$langs->trans("Conciliate").'</a>';
print '<a class="butAction" href="'.DOL_URL_ROOT.'/compta/bank/bankentries.php?action=reconcile'.$param.(!empty($page)?('&page='.$page):'').'">'.$langs->trans("Conciliate").'</a>';
} else {
print '<a class="butActionRefused" title="'.$langs->trans("NotEnoughPermissions").'" href="#">'.$langs->trans("Conciliate").'</a>';
}
@@ -580,6 +582,7 @@ if ($resql)
print '<input type="hidden" name="view" value="'.dol_escape_htmltag($view).'">';
print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
print '<input type="hidden" name="page" value="'.$page.'">';
print '<input type="hidden" name="id" value="'.$id.'">';
print '<input type="hidden" name="ref" value="'.$ref.'">';
if (GETPOST('bid')) print '<input type="hidden" name="bid" value="'.GETPOST("bid").'">';
@@ -902,7 +905,7 @@ if ($resql)
exit;
}
//Loop on each record
// Loop on each record before
$sign = 1;
$i = 0;
$sqlforbalance='SELECT SUM(b.amount) as balance';
@@ -912,7 +915,8 @@ if ($resql)
$sqlforbalance.= " WHERE b.fk_account = ba.rowid";
$sqlforbalance.= " AND ba.entity IN (".getEntity('bank_account', 1).")";
$sqlforbalance.= " AND b.fk_account = ".$account;
$sqlforbalance.= " AND b.datev < '" . $db->idate($db->jdate($objp->dv)) . "'";
//$sqlforbalance.= " AND (b.datev < '" . $db->idate($db->jdate($objp->dv)) . "')";
$sqlforbalance.= " AND (b.datev < '" . $db->idate($db->jdate($objp->dv)) . "' OR (b.datev = '" . $db->idate($db->jdate($objp->dv)) . "' AND (b.dateo < '".$db->idate($db->jdate($objp->do))."' OR (b.dateo = '".$db->idate($db->jdate($objp->do))."' AND b.rowid < ".$objp->rowid."))))";
$resqlforbalance = $db->query($sqlforbalance);
//print $sqlforbalance;
if ($resqlforbalance)
@@ -1211,6 +1215,7 @@ if ($resql)
{
print '<td align="right">-</td>';
}
if (! $i) $totalarray['nbfield']++;
}
if (! empty($arrayfields['b.num_releve']['checked']))

View File

@@ -57,7 +57,7 @@ $limit = GETPOST("limit")?GETPOST("limit","int"):$conf->liste_limit;
$sortfield = GETPOST("sortfield",'alpha');
$sortorder = GETPOST("sortorder",'alpha');
$page = GETPOST("page",'int');
if ($page == -1) { $page = 0; }
if (empty($page) || $page == -1) { $page = 0; } // If $page is not defined, or '' or -1
$offset = $limit * $page;
$pageprev = $page - 1;
$pagenext = $page + 1;

View File

@@ -275,6 +275,8 @@ if ($_REQUEST["account"] || $_REQUEST["ref"])
$refcomp=$societestatic->getNomUrl(1,'',24);
$paiement = $facturestatic->getSommePaiement(); // Payment already done
$paiement+= $facturestatic->getSumDepositsUsed();
$paiement+= $facturestatic->getSumCreditNotesUsed();
}
if ($obj->family == 'social_contribution')
{

View File

@@ -611,7 +611,7 @@ if (empty($reshook))
$i = 0;
foreach ($object->lines as $line)
{
if ($line->total_ht!=0)
if ($line->product_type < 9 && $line->total_ht != 0) // Remove lines with product_type greater than or equal to 9
{ // no need to create discount if amount is null
$amount_ht[$line->tva_tx] += $line->total_ht;
$amount_tva[$line->tva_tx] += $line->total_tva;
@@ -1149,7 +1149,9 @@ if (empty($reshook))
// Extrafields
if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED) && method_exists($lines[$i], 'fetch_optionals')) {
$lines[$i]->fetch_optionals($lines[$i]->rowid);
$targetExtraFields = new ExtraFields($db);
$targetExtraFieldLabels = $targetExtraFields->fetch_name_optionals_label($object->table_element_line);
$lines[$i]->fetch_optionals($lines[$i]->rowid, $targetExtraFieldLabels);
$array_options = $lines[$i]->array_options;
}
@@ -1502,12 +1504,33 @@ if (empty($reshook))
// Add custom code and origin country into description
if (empty($conf->global->MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE) && (! empty($prod->customcode) || ! empty($prod->country_code))) {
$tmptxt = '(';
if (! empty($prod->customcode))
$tmptxt .= $langs->transnoentitiesnoconv("CustomCode") . ': ' . $prod->customcode;
if (! empty($prod->customcode) && ! empty($prod->country_code))
$tmptxt .= ' - ';
if (! empty($prod->country_code))
$tmptxt .= $langs->transnoentitiesnoconv("CountryOrigin") . ': ' . getCountry($prod->country_code, 0, $db, $langs, 0);
// Define output language
if (! empty($conf->global->MAIN_MULTILANGS) && ! empty($conf->global->PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE)) {
$outputlangs = $langs;
$newlang = '';
if (empty($newlang) && GETPOST('lang_id','alpha'))
$newlang = GETPOST('lang_id','alpha');
if (empty($newlang))
$newlang = $object->thirdparty->default_lang;
if (! empty($newlang)) {
$outputlangs = new Translate("", $conf);
$outputlangs->setDefaultLang($newlang);
$outputlangs->load('products');
}
if (! empty($prod->customcode))
$tmptxt .= $outputlangs->transnoentitiesnoconv("CustomCode") . ': ' . $prod->customcode;
if (! empty($prod->customcode) && ! empty($prod->country_code))
$tmptxt .= ' - ';
if (! empty($prod->country_code))
$tmptxt .= $outputlangs->transnoentitiesnoconv("CountryOrigin") . ': ' . getCountry($prod->country_code, 0, $db, $outputlangs, 0);
} else {
if (! empty($prod->customcode))
$tmptxt .= $langs->transnoentitiesnoconv("CustomCode") . ': ' . $prod->customcode;
if (! empty($prod->customcode) && ! empty($prod->country_code))
$tmptxt .= ' - ';
if (! empty($prod->country_code))
$tmptxt .= $langs->transnoentitiesnoconv("CountryOrigin") . ': ' . getCountry($prod->country_code, 0, $db, $langs, 0);
}
$tmptxt .= ')';
$desc = dol_concatdesc($desc, $tmptxt);
}
@@ -2630,9 +2653,9 @@ if ($action == 'create')
if (!empty($conf->multicurrency->enabled))
{
print '<tr><td>' . $langs->trans('MulticurrencyTotalHT') . '</td><td colspan="2">' . price($objectsrc->multicurrency_total_ht) . '</td></tr>';
print '<tr><td>' . $langs->trans('MulticurrencyTotalVAT') . '</td><td colspan="2">' . price($objectsrc->multicurrency_total_tva) . "</td></tr>";
print '<tr><td>' . $langs->trans('MulticurrencyTotalTTC') . '</td><td colspan="2">' . price($objectsrc->multicurrency_total_ttc) . "</td></tr>";
print '<tr><td>' . $langs->trans('MulticurrencyAmountHT') . '</td><td colspan="2">' . price($objectsrc->multicurrency_total_ht) . '</td></tr>';
print '<tr><td>' . $langs->trans('MulticurrencyAmountVAT') . '</td><td colspan="2">' . price($objectsrc->multicurrency_total_tva) . "</td></tr>";
print '<tr><td>' . $langs->trans('MulticurrencyAmountTTC') . '</td><td colspan="2">' . price($objectsrc->multicurrency_total_ttc) . "</td></tr>";
}
}
@@ -2971,8 +2994,9 @@ else if ($id > 0 || ! empty($ref))
// Ref customer
$morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, $user->rights->facture->creer, 'string', '', 0, 1);
$morehtmlref.=$form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, $user->rights->facture->creer, 'string', '', null, null, '', 1);
// Thirdparty
// Thirdparty
$morehtmlref.='<br>'.$langs->trans('ThirdParty') . ' : ' . $object->thirdparty->getNomUrl(1);
if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) $morehtmlref.=' (<a href="'.DOL_URL_ROOT.'/compta/facture/list.php?socid='.$object->thirdparty->id.'">'.$langs->trans("OtherBills").'</a>)';
// Project
if (! empty($conf->projet->enabled))
{
@@ -3864,7 +3888,7 @@ else if ($id > 0 || ! empty($ref))
print ' <form name="addproduct" id="addproduct" action="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . (($action != 'editline') ? '#add' : '#line_' . GETPOST('lineid')) . '" method="POST">
print ' <form name="addproduct" id="addproduct" action="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . (($action != 'editline') ? '#addline' : '#line_' . GETPOST('lineid')) . '" method="POST">
<input type="hidden" name="token" value="' . $_SESSION ['newtoken'] . '">
<input type="hidden" name="action" value="' . (($action != 'editline') ? 'addline' : 'updateligne') . '">
<input type="hidden" name="mode" value="">

View File

@@ -475,7 +475,13 @@ class FactureRec extends CommonInvoice
{
$sql = "DELETE FROM ".MAIN_DB_PREFIX."facture_rec WHERE rowid = ".$rowid;
dol_syslog($sql);
if (! $this->db->query($sql))
if ($this->db->query($sql))
{
// Delete linked object
$res = $this->deleteObjectLinked();
if ($res < 0) $error=-3;
}
else
{
$this->error=$this->db->lasterror();
$error=-1;

View File

@@ -486,7 +486,8 @@ class Facture extends CommonInvoice
foreach ($exp->linkedObjectsIds['commande'] as $key => $value)
{
$originforcontact = 'commande';
$originidforcontact = $value->id;
if (is_object($value)) $originidforcontact = $value->id;
else $originidforcontact = $value;
break; // We take first one
}
}
@@ -2244,9 +2245,12 @@ class Facture extends CommonInvoice
$final = ($this->lines[$i]->situation_percent == 100);
$i++;
}
if ($final) {
$this->setFinal($user);
}
if (empty($final)) $this->situation_final = 0;
else $this->situation_final = 1;
$this->setFinal($user);
}
}
}
@@ -2877,7 +2881,7 @@ class Facture extends CommonInvoice
// Cap percentages to 100
if ($percent > 100) $percent = 100;
$line->situation_percent = $percent;
$tabprice = calcul_price_total($line->qty, $line->subprice, $line->remise_percent, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, $line->product_type, 'HT', 0, 0, $mysoc, '', $percent);
$tabprice = calcul_price_total($line->qty, $line->subprice, $line->remise_percent, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, 0, 'HT', 0, $line->product_type, $mysoc, '', $percent);
$line->total_ht = $tabprice[0];
$line->total_tva = $tabprice[1];
$line->total_ttc = $tabprice[2];
@@ -4089,7 +4093,6 @@ class Facture extends CommonInvoice
$this->db->begin();
$this->situation_final = 1;
$sql = 'UPDATE ' . MAIN_DB_PREFIX . 'facture SET situation_final = ' . $this->situation_final . ' where rowid = ' . $this->id;
dol_syslog(__METHOD__, LOG_DEBUG);

View File

@@ -4,6 +4,7 @@
* Copyright (C) 2005 Marc Barilley / Ocebo <marc@ocebo.com>
* Copyright (C) 2005-2011 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2013 Cédric Salvador <csalvador@gpcsolutions.fr>
* Copyright (C) 2017 Frédéric France <frederic.france@netlogic.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -188,6 +189,6 @@ else
print $langs->trans("ErrorUnknown");
}
$db->close();
llxFooter();
$db->close();

View File

@@ -1055,7 +1055,7 @@ if ($action == 'create')
$disableedit=1;
$disablemove=1;
$disableremove=1;
$ret = $object->printObjectLines('', $mysoc, $soc, $lineid, 0); // No date selector for template invoice
$ret = $object->printObjectLines('', $mysoc, $object->thirdparty, $lineid, 0); // No date selector for template invoice
}
print "</table>\n";
@@ -1470,7 +1470,7 @@ else
{
//$disableedit=1;
//$disablemove=1;
$ret = $object->printObjectLines($action, $mysoc, $soc, $lineid, 0); // No date selector for template invoice
$ret = $object->printObjectLines($action, $mysoc, $object->thirdparty, $lineid, 0); // No date selector for template invoice
}
// Form to add new line
@@ -1481,7 +1481,7 @@ else
$var = true;
// Add free products/services
$object->formAddObjectLine(0, $mysoc, $soc); // No date selector for template invoice
$object->formAddObjectLine(0, $mysoc, $object->thirdparty); // No date selector for template invoice
$parameters = array();
$reshook = $hookmanager->executeHooks('formAddObjectLine', $parameters, $object, $action); // Note that $action and $object may have been modified by hook

View File

@@ -423,6 +423,7 @@ if ($resql)
{
$soc = new Societe($db);
$soc->fetch($socid);
if (empty($search_societe)) $search_societe = $soc->name;
}
$param='&socid='.$socid;
@@ -479,6 +480,7 @@ if ($resql)
$i = 0;
print '<form method="POST" name="searchFormList" action="'.$_SERVER["PHP_SELF"].'">'."\n";
if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
@@ -619,7 +621,7 @@ if ($resql)
$moreforfilter.='<div class="divsearchfield">';
$moreforfilter.=$langs->trans('IncludingProductWithTag'). ': ';
$cate_arbo = $form->select_all_categories(Categorie::TYPE_PRODUCT, null, 'parent', null, null, 1);
$moreforfilter.=$form->selectarray('search_product_category', $cate_arbo, $search_product_category, 1, 0, 0, '', 0, 0, 0, 0, '', 1);
$moreforfilter.=$form->selectarray('search_product_category', $cate_arbo, $search_product_category, 1, 0, 0, '', 0, 0, 0, 0, 'maxwidth300', 1);
$moreforfilter.='</div>';
}
$parameters=array();
@@ -1085,10 +1087,10 @@ if ($resql)
// Status
if (! empty($arrayfields['f.fk_statut']['checked']))
{
print '<td align="right" class="nowrap">';
print $facturestatic->LibStatut($obj->paye,$obj->fk_statut,5,$paiement,$obj->type);
print "</td>";
if (! $i) $totalarray['nbfield']++;
print '<td align="right" class="nowrap">';
print $facturestatic->LibStatut($obj->paye,$obj->fk_statut,5,$paiement,$obj->type);
print "</td>";
if (! $i) $totalarray['nbfield']++;
}
// Action column

View File

@@ -84,7 +84,7 @@ dol_mkdir($dir);
$stats = new FactureStats($db, $socid, $mode, ($userid>0?$userid:0));
if ($mode == 'customer')
{
if ($object_status != '' && $object_status >= -1) $stats->where .= ' AND f.fk_statut IN ('.$object_status.')';
if ($object_status != '' && $object_status >= 0) $stats->where .= ' AND f.fk_statut IN ('.$object_status.')';
}
if ($mode == 'supplier')
{
@@ -232,7 +232,7 @@ $tmp_companies = $form->select_thirdparty_list($socid,'socid',$filter,1, 0, 0, a
$companies = array();
foreach ($tmp_companies as $value) {
$companies[$value['value']] = $value['label'];
$companies[$value['key']] = $value['label'];
}
print '<div class="fichecenter"><div class="fichethirdleft">';

View File

@@ -54,8 +54,9 @@ if (empty($year))
$year_current = $year;
$year_start = $year;
}
$date_start=dol_mktime(0,0,0,$_REQUEST["date_startmonth"],$_REQUEST["date_startday"],$_REQUEST["date_startyear"]);
$date_end=dol_mktime(23,59,59,$_REQUEST["date_endmonth"],$_REQUEST["date_endday"],$_REQUEST["date_endyear"]);
$date_start = dol_mktime( 0, 0, 0, GETPOST( "date_startmonth" ), GETPOST( "date_startday" ), GETPOST( "date_startyear" ) );
$date_end = dol_mktime( 23, 59, 59, GETPOST( "date_endmonth" ), GETPOST( "date_endday" ), GETPOST( "date_endyear" ) );
// Quarter
if (empty($date_start) || empty($date_end)) // We define date_start and date_end
{
@@ -92,12 +93,9 @@ $socid = GETPOST('socid','int');
if ($user->societe_id) $socid=$user->societe_id;
$result = restrictedArea($user, 'tax', '', '', 'charges');
/*
/**
* View
*/
$morequerystring='';
$listofparams=array('date_startmonth','date_startyear','date_startday','date_endmonth','date_endyear','date_endday');
foreach($listofparams as $param)
@@ -118,6 +116,7 @@ $paymentfourn_static=new PaiementFourn($db);
$fsearch.=' <input type="hidden" name="year" value="'.$year.'">';
$fsearch.=' <input type="hidden" name="modetax" value="'.$modetax.'">';
$fsearch.=' <input type="hidden" name="localTaxType" value="'.$local.'">';
$calc=$conf->global->MAIN_INFO_LOCALTAX_CALC.$local;
@@ -196,9 +195,8 @@ $total = 0;
$i=0;
// Load arrays of datas
$x_coll = vat_by_date($db, 0, 0, $date_start, $date_end, $modetax, 'sell');
$x_paye = vat_by_date($db, 0, 0, $date_start, $date_end, $modetax, 'buy');
$x_coll = tax_by_date('localtax' . $local, $db, 0, 0, $date_start, $date_end, $modetax, 'sell');
$x_paye = tax_by_date('localtax' . $local, $db, 0, 0, $date_start, $date_end, $modetax, 'buy');
echo '<table class="noborder" width="100%">';

View File

@@ -745,7 +745,8 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie
{
// Print total
print '<tr class="liste_total">';
print '<td colspan="3" align="left">'.$langs->trans('TotalTTC').'</td>';
print '<td colspan="2" align="left">'.$langs->trans('TotalTTC').'</td>';
if (!empty($conf->multicurrency->enabled)) print '<td></td>';
if (!empty($conf->multicurrency->enabled)) print '<td></td>';
if (!empty($conf->multicurrency->enabled)) print '<td></td>';
if (!empty($conf->multicurrency->enabled)) print '<td></td>';

View File

@@ -279,7 +279,7 @@ class Cpaiement
$num = $this->db->num_rows($resql);
while ($obj = $this->db->fetch_object($resql)) {
$line = new CpaiementLine();
$line = new Cpaiement();
$line->id = $obj->id;

View File

@@ -196,7 +196,6 @@ if ($action == 'update' && ! $_POST["cancel"] && $user->rights->tax->charges->cr
{
$result=$object->fetch($id);
$object->lib=GETPOST('label');
$object->date_ech=$dateech;
$object->periode=$dateperiod;
$object->amount=price2num($amount);

View File

@@ -327,7 +327,7 @@ if (empty($reshook))
$label = $lines[$i]->product_label;
}
$desc .= ($lines[$i]->desc && $lines[$i]->desc!=$lines[$i]->libelle)?dol_htmlentitiesbr($lines[$i]->desc):'';
$desc = ($lines[$i]->desc && $lines[$i]->desc!=$lines[$i]->libelle)?dol_htmlentitiesbr($lines[$i]->desc):'';
}
else {
$desc = dol_htmlentitiesbr($lines[$i]->desc);
@@ -873,11 +873,26 @@ if (empty($reshook))
setEventMessages($object->error, $object->errors, 'errors');
}
$old_ref = $object->ref;
$result = $object->setValueFrom('ref', GETPOST('ref','alpha'), '', null, 'text', '', $user, 'CONTRACT_MODIFY');
if ($result < 0) {
setEventMessages($object->error, $object->errors, 'errors');
$action = 'editref';
} else {
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
$old_filedir = $conf->contrat->dir_output . '/' . dol_sanitizeFileName($old_ref);
$new_filedir = $conf->contrat->dir_output . '/' . dol_sanitizeFileName($object->ref);
$files = dol_dir_list($old_filedir);
if (!empty($files))
{
if (!is_dir($new_filedir)) dol_mkdir($new_filedir);
foreach ($files as $file)
{
dol_move($file['fullname'], $new_filedir.'/'.$file['name']);
}
}
header("Location: " . $_SERVER['PHP_SELF'] . "?id=" . $object->id);
exit;
}

View File

@@ -228,7 +228,7 @@ class Contrat extends CommonObject
*/
function active_line($user, $line_id, $date, $date_end='', $comment='')
{
$this->lines[$this->lines_id_index_mapper[$line_id]]->active_line($user, $date, $date_end, $comment);
return $this->lines[$this->lines_id_index_mapper[$line_id]]->active_line($user, $date, $date_end, $comment);
}
@@ -243,7 +243,7 @@ class Contrat extends CommonObject
*/
function close_line($user, $line_id, $date_end, $comment='')
{
$this->lines[$this->lines_id_index_mapper[$line_id]]->close_line($user, $date_end, $comment);
return $this->lines[$this->lines_id_index_mapper[$line_id]]->close_line($user, $date_end, $comment);
}
@@ -322,7 +322,11 @@ class Contrat extends CommonObject
$result=$this->thirdparty->set_as_client();
// Define new ref
if (! $error && (preg_match('/^[\(]?PROV/i', $this->ref) || empty($this->ref))) // empty should not happened, but when it occurs, the test save life
if ($force_number)
{
$num = $force_number;
}
else if (! $error && (preg_match('/^[\(]?PROV/i', $this->ref) || empty($this->ref))) // empty should not happened, but when it occurs, the test save life
{
$num = $this->getNextNumRef($this->thirdparty);
}
@@ -1629,8 +1633,8 @@ class Contrat extends CommonObject
if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED) && is_array($array_options) && count($array_options)>0) // For avoid conflicts if trigger used
{
$contractline = new ContratLigne($this->db);
$contractline->array_options=$array_option;
$contractline->id= $this->db->last_insert_id(MAIN_DB_PREFIX.$contractline->table_element);
$contractline->array_options=$array_options;
$contractline->id= $rowid;
$result=$contractline->insertExtraFields();
if ($result < 0)
{

View File

@@ -306,6 +306,13 @@ if ($resql)
$arrayofselected=is_array($toselect)?$toselect:array();
if ($socid > 0)
{
$soc = new Societe($db);
$soc->fetch($socid);
if (empty($search_name)) $search_name = $soc->name;
}
$param='';
if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage;
if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit;
@@ -375,7 +382,7 @@ if ($resql)
$moreforfilter.='<div class="divsearchfield">';
$moreforfilter.=$langs->trans('IncludingProductWithTag'). ': ';
$cate_arbo = $form->select_all_categories(Categorie::TYPE_PRODUCT, null, 'parent', null, null, 1);
$moreforfilter.=$form->selectarray('search_product_category', $cate_arbo, $search_product_category, 1, 0, 0, '', 0, 0, 0, 0, '', 1);
$moreforfilter.=$form->selectarray('search_product_category', $cate_arbo, $search_product_category, 1, 0, 0, '', 0, 0, 0, 0, 'maxwidth300', 1);
$moreforfilter.='</div>';
}

View File

@@ -75,7 +75,7 @@ $opclotureyear=GETPOST('opclotureyear');
$filter_opcloture=GETPOST('filter_opcloture');
// Initialize context for list
$contextpage=GETPOST('contextpage','aZ')?GETPOST('contextpage','aZ'):'servicelist'.$mode;
$contextpage=GETPOST('contextpage','aZ')?GETPOST('contextpage','aZ'):'contractservicelist'.$mode;
// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array
$hookmanager->initHooks(array($contextpage));
@@ -331,7 +331,7 @@ if ($conf->categorie->enabled && ($user->rights->produit->lire || $user->rights-
$moreforfilter.='<div class="divsearchfield">';
$moreforfilter.=$langs->trans('IncludingProductWithTag'). ': ';
$cate_arbo = $form->select_all_categories(Categorie::TYPE_PRODUCT, null, 'parent', null, null, 1);
$moreforfilter.=$form->selectarray('search_product_category', $cate_arbo, $search_product_category, 1, 0, 0, '', 0, 0, 0, 0, '', 1);
$moreforfilter.=$form->selectarray('search_product_category', $cate_arbo, $search_product_category, 1, 0, 0, '', 0, 0, 0, 0, 'maxwidth300', 1);
$moreforfilter.='</div>';
}

View File

@@ -150,6 +150,15 @@ elseif ($action == 'renamefile' && GETPOST('renamefilesave'))
{
$filenamefrom=dol_sanitizeFileName(GETPOST('renamefilefrom'));
$filenameto=dol_sanitizeFileName(GETPOST('renamefileto'));
// Security:
// Disallow file with some extensions. We rename them.
// Because if we put the documents directory into a directory inside web root (very bad), this allows to execute on demand arbitrary code.
if (preg_match('/\.htm|\.html|\.php|\.pl|\.cgi$/i',$filenameto) && empty($conf->global->MAIN_DOCUMENT_IS_OUTSIDE_WEBROOT_SO_NOEXE_NOT_REQUIRED))
{
$filenameto.= '.noexe';
}
if ($filenamefrom && $filenameto)
{
$srcpath = $upload_dir.'/'.$filenamefrom;

View File

@@ -139,7 +139,7 @@ if (! dol_is_dir($upload_dir))
}
print '<!-- ajaxdirpreview type='.$type.' -->'."\n";
print '<!-- Page called with mode='.(isset($mode)?$mode:'').' type='.$type.' module='.$module.' url='.$url.' '.$_SERVER["PHP_SELF"].'?'.$_SERVER["QUERY_STRING"].' -->'."\n";
//print '<!-- Page called with mode='.dol_escape_htmltag(isset($mode)?$mode:'').' type='.dol_escape_htmltag($type).' module='.dol_escape_htmltag($module).' url='.dol_escape_htmltag($url).' '.dol_escape_htmltag($_SERVER["PHP_SELF"]).'?'.dol_escape_htmltag($_SERVER["QUERY_STRING"]).' -->'."\n";
$param=($sortfield?'&sortfield='.$sortfield:'').($sortorder?'&sortorder='.$sortorder:'');
@@ -162,21 +162,13 @@ if ($type == 'directory')
// Auto area for suppliers invoices
else if ($module == 'invoice') $upload_dir = $conf->facture->dir_output;
// Auto area for suppliers invoices
else if ($module == 'invoice_supplier')
{
$relativepath='facture';
$upload_dir = $conf->fournisseur->dir_output.'/'.$relativepath;
}
else if ($module == 'invoice_supplier') $upload_dir = $conf->fournisseur->facture->dir_output;
// Auto area for customers orders
else if ($module == 'propal') $upload_dir = $conf->propal->dir_output;
// Auto area for customers orders
else if ($module == 'order') $upload_dir = $conf->commande->dir_output;
// Auto area for suppliers orders
else if ($module == 'order_supplier')
{
$relativepath='commande';
$upload_dir = $conf->fournisseur->dir_output.'/'.$relativepath;
}
else if ($module == 'order_supplier') $upload_dir = $conf->fournisseur->commande->dir_output;
// Auto area for suppliers invoices
else if ($module == 'contract') $upload_dir = $conf->contrat->dir_output;
// Auto area for products
@@ -197,10 +189,12 @@ if ($type == 'directory')
$param.='&module='.$module;
$textifempty=($section?$langs->trans("NoFileFound"):($showonrightsize=='featurenotyetavailable'?$langs->trans("FeatureNotYetAvailable"):$langs->trans("NoFileFound")));
if ($module == 'company') $excludefiles[]='^contact$'; // The subdir 'contact' contains files of contacts with no id of thirdparty.
$filearray=dol_dir_list($upload_dir,"files",1,'', $excludefiles, $sortfield, $sorting,1);
$formfile->list_of_autoecmfiles($upload_dir,$filearray,$module,$param,1,'',$user->rights->ecm->upload,1,$textifempty,$maxlengthname,$url);
}
//Manual area
// Manual area
else
{
$relativepath=$ecmdir->getRelativePath();

View File

@@ -45,7 +45,7 @@ $action=GETPOST('action');
//top_htmlhead("", "", 1); // Replaced with top_httphead. An ajax page does not need html header.
top_httphead();
//print '<!-- Ajax page called with url '.$_SERVER["PHP_SELF"].'?'.$_SERVER["QUERY_STRING"].' -->'."\n";
//print '<!-- Ajax page called with url '.dol_escape_htmltag($_SERVER["PHP_SELF"]).'?'.dol_escape_htmltag($_SERVER["QUERY_STRING"]).' -->'."\n";
if (($user->rights->banque->modifier || $user->rights->banque->consolidate) && $action == 'dvnext')
{

View File

@@ -50,7 +50,7 @@ $userid=GETPOST('userid','int');
//top_htmlhead("", "", 1); // Replaced with top_httphead. An ajax page does not need html header.
top_httphead();
print '<!-- Ajax page called with url '.$_SERVER["PHP_SELF"].'?'.$_SERVER["QUERY_STRING"].' -->'."\n";
print '<!-- Ajax page called with url '.dol_escape_htmltag($_SERVER["PHP_SELF"]).'?'.dol_escape_htmltag($_SERVER["QUERY_STRING"]).' -->'."\n";
// Add a box
if ($boxid > 0 && $zone !='' && $userid > 0)

View File

@@ -45,7 +45,7 @@ $name=GETPOST('name','alpha');
//top_htmlhead("", "", 1); // Replaced with top_httphead. An ajax page does not need html header.
top_httphead();
print '<!-- Ajax page called with url '.$_SERVER["PHP_SELF"].'?'.$_SERVER["QUERY_STRING"].' -->'."\n";
//print '<!-- Ajax page called with url '.dol_escape_htmltag($_SERVER["PHP_SELF"]).'?'.dol_escape_htmltag($_SERVER["QUERY_STRING"]).' -->'."\n";
// Registering the location of boxes
if (! empty($action) && ! empty($name))

View File

@@ -41,7 +41,7 @@ $showempty = GETPOST('showempty','int');
top_httphead();
//print '<!-- Ajax page called with url '.$_SERVER["PHP_SELF"].'?'.$_SERVER["QUERY_STRING"].' -->'."\n";
//print '<!-- Ajax page called with url '.dol_escape_htmltag($_SERVER["PHP_SELF"]).'?'.dol_escape_htmltag($_SERVER["QUERY_STRING"]).' -->'."\n";
// Load original field value
if (! empty($id) && ! empty($action) && ! empty($htmlname))

View File

@@ -40,7 +40,7 @@ $type = GETPOST('type', 'alpha');
top_httphead();
print '<!-- Ajax page called with url '.$_SERVER["PHP_SELF"].'?'.$_SERVER["QUERY_STRING"].' -->'."\n";
print '<!-- Ajax page called with url '.dol_escape_htmltag($_SERVER["PHP_SELF"]).'?'.dol_escape_htmltag($_SERVER["QUERY_STRING"]).' -->'."\n";
if(! empty($id) && ! empty($element) && ! empty($htmlelement) && ! empty($type))
{

View File

@@ -41,7 +41,7 @@ $fk_element = GETPOST('fk_element','alpha');
top_httphead();
//print '<!-- Ajax page called with url '.$_SERVER["PHP_SELF"].'?'.$_SERVER["QUERY_STRING"].' -->'."\n";
//print '<!-- Ajax page called with url '.dol_escape_htmltag($_SERVER["PHP_SELF"]).'?'.dol_escape_htmltag($_SERVER["QUERY_STRING"]).' -->'."\n";
// Load original field value
if (! empty($field) && ! empty($element) && ! empty($table_element) && ! empty($fk_element))

View File

@@ -42,7 +42,7 @@ $object = new GenericObject($db);
top_httphead();
print '<!-- Ajax page called with url '.$_SERVER["PHP_SELF"].'?'.$_SERVER["QUERY_STRING"].' -->'."\n";
print '<!-- Ajax page called with url '.dol_escape_htmltag($_SERVER["PHP_SELF"]).'?'.dol_escape_htmltag($_SERVER["QUERY_STRING"]).' -->'."\n";
// Registering new values
if (($action == 'set') && ! empty($id))

View File

@@ -39,7 +39,7 @@ $tva_tx = str_replace('*','',GETPOST('tva_tx','alpha'));
top_httphead();
//print '<!-- Ajax page called with url '.$_SERVER["PHP_SELF"].'?'.$_SERVER["QUERY_STRING"].' -->'."\n";
//print '<!-- Ajax page called with url '.dol_escape_htmltag($_SERVER["PHP_SELF"]).'?'.dol_escape_htmltag($_SERVER["QUERY_STRING"]).' -->'."\n";
// Load original field value
if (! empty($output) && isset($amount) && isset($tva_tx))

View File

@@ -39,7 +39,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/genericobject.class.php';
top_httphead();
print '<!-- Ajax page called with url '.$_SERVER["PHP_SELF"].'?'.$_SERVER["QUERY_STRING"].' -->'."\n";
print '<!-- Ajax page called with url '.dol_escape_htmltag($_SERVER["PHP_SELF"]).'?'.dol_escape_htmltag($_SERVER["QUERY_STRING"]).' -->'."\n";
// Registering the location of boxes
if ((isset($_POST['roworder']) && ! empty($_POST['roworder'])) && (isset($_POST['table_element_line']) && ! empty($_POST['table_element_line']))

View File

@@ -54,7 +54,7 @@ savemethodname:
top_httphead();
//print '<!-- Ajax page called with url '.$_SERVER["PHP_SELF"].'?'.$_SERVER["QUERY_STRING"].' -->'."\n";
//print '<!-- Ajax page called with url '.dol_escape_htmltag($_SERVER["PHP_SELF"]).'?'.dol_escape_htmltag($_SERVER["QUERY_STRING"]).' -->'."\n";
//print_r($_POST);
// Load original field value

View File

@@ -38,7 +38,7 @@ require '../../main.inc.php';
//top_htmlhead("", "", 1); // Replaced with top_httphead. An ajax page does not need html header.
top_httphead();
//print '<!-- Ajax page called with url '.$_SERVER["PHP_SELF"].'?'.$_SERVER["QUERY_STRING"].' -->'."\n";
//print '<!-- Ajax page called with url '.dol_escape_htmltag($_SERVER["PHP_SELF"]).'?'.dol_escape_htmltag($_SERVER["QUERY_STRING"]).' -->'."\n";
// Registering the location of boxes
if (isset($_GET['action']) && ! empty($_GET['action']))

View File

@@ -41,7 +41,7 @@ $productid = (GETPOST('productid','int')?GETPOST('productid','int'):0);
top_httphead();
//print '<!-- Ajax page called with url '.$_SERVER["PHP_SELF"].'?'.$_SERVER["QUERY_STRING"].' -->'."\n";
//print '<!-- Ajax page called with url '.dol_escape_htmltag($_SERVER["PHP_SELF"]).'?'.dol_escape_htmltag($_SERVER["QUERY_STRING"]).' -->'."\n";
// Load original field value
if (! empty($id) && ! empty($action) && ! empty($htmlname))

View File

@@ -45,7 +45,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
//top_htmlhead("", "", 1); // Replaced with top_httphead. An ajax page does not need html header.
top_httphead();
//print '<!-- Ajax page called with url '.$_SERVER["PHP_SELF"].'?'.$_SERVER["QUERY_STRING"].' -->'."\n";
//print '<!-- Ajax page called with url '.dol_escape_htmltag($_SERVER["PHP_SELF"]).'?'.dol_escape_htmltag($_SERVER["QUERY_STRING"]).' -->'."\n";
dol_syslog("GET is ".join(',',$_GET).', MAIN_USE_ZIPTOWN_DICTIONNARY='.(empty($conf->global->MAIN_USE_ZIPTOWN_DICTIONNARY)?'':$conf->global->MAIN_USE_ZIPTOWN_DICTIONNARY));
//var_dump($_GET);

View File

@@ -396,7 +396,7 @@ abstract class CommonDocGenerator
$array_key.'_already_creditnote'=>price2num($sumcreditnote),
$array_key.'_already_payed_all_locale'=>price(price2num($sumpayed + $sumdeposit + $sumcreditnote, 'MT'), 0, $outputlangs),
$array_key.'already_payed_all'=> price2num(($sumpayed + $sumdeposit + $sumcreditnote), 'MT'),
$array_key.'_already_payed_all'=> price2num(($sumpayed + $sumdeposit + $sumcreditnote), 'MT'),
// Remain to pay with all know infrmation (except open direct debit requests)
$array_key.'_remain_to_pay_locale'=>price(price2num($object->total_ttc - $sumpayed - $sumdeposit - $sumcreditnote, 'MT'), 0, $outputlangs),

View File

@@ -600,47 +600,63 @@ abstract class CommonObject
$datecreate = dol_now();
$this->db->begin();
// Socpeople must have already been added by some a trigger, then we have to check it to avoid DB_ERROR_RECORD_ALREADY_EXISTS error
$TListeContacts=$this->liste_contact(-1, $source);
$already_added=false;
if(!empty($TListeContacts)) {
foreach($TListeContacts as $array_contact) {
if($array_contact['status'] == 4 && $array_contact['id'] == $fk_socpeople && $array_contact['fk_c_type_contact'] == $id_type_contact) {
$already_added=true;
break;
}
}
}
// Insertion dans la base
$sql = "INSERT INTO ".MAIN_DB_PREFIX."element_contact";
$sql.= " (element_id, fk_socpeople, datecreate, statut, fk_c_type_contact) ";
$sql.= " VALUES (".$this->id.", ".$fk_socpeople." , " ;
$sql.= "'".$this->db->idate($datecreate)."'";
$sql.= ", 4, ". $id_type_contact;
$sql.= ")";
if(!$already_added) {
$resql=$this->db->query($sql);
if ($resql)
{
if (! $notrigger)
{
$result=$this->call_trigger(strtoupper($this->element).'_ADD_CONTACT', $user);
if ($result < 0)
$this->db->begin();
// Insertion dans la base
$sql = "INSERT INTO ".MAIN_DB_PREFIX."element_contact";
$sql.= " (element_id, fk_socpeople, datecreate, statut, fk_c_type_contact) ";
$sql.= " VALUES (".$this->id.", ".$fk_socpeople." , " ;
$sql.= "'".$this->db->idate($datecreate)."'";
$sql.= ", 4, ". $id_type_contact;
$sql.= ")";
$resql=$this->db->query($sql);
if ($resql)
{
if (! $notrigger)
{
$result=$this->call_trigger(strtoupper($this->element).'_ADD_CONTACT', $user);
if ($result < 0)
{
$this->db->rollback();
return -1;
}
}
$this->db->commit();
return 1;
}
else
{
if ($this->db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS')
{
$this->error=$this->db->errno();
$this->db->rollback();
echo 'err rollback';
return -2;
}
else
{
$this->error=$this->db->error();
$this->db->rollback();
return -1;
}
}
$this->db->commit();
return 1;
}
else
{
if ($this->db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS')
{
$this->error=$this->db->errno();
$this->db->rollback();
return -2;
}
else
{
$this->error=$this->db->error();
$this->db->rollback();
return -1;
}
}
}
} else return 0;
}
/**
@@ -1469,7 +1485,7 @@ abstract class CommonObject
$fieldname = 'multicurrency_code';
$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element;
$sql .= ' SET '.$fieldname.' = "'.$this->db->escape($code).'"';
$sql .= ' SET '.$fieldname." = '".$this->db->escape($code)."'";
$sql .= ' WHERE rowid='.$this->id;
if ($this->db->query($sql))
@@ -1544,7 +1560,7 @@ abstract class CommonObject
$this->updateline($line->id, $line->desc, $line->subprice, $line->qty, $line->remise_percent, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, 'HT', $line->info_bits, $line->product_type, false, $line->date_start, $line->date_end, $line->array_options, $line->fk_unit, $line->multicurrency_subprice);
break;
case 'invoice_supplier':
$this->updateline($line->id, $line->desc, $line->subprice, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, $line->qty, 0, 'HT', $line->info_bits, $line->product_type, $line->remise_percent, false, $line->date_start, $line->date_end, $line->array_options, $line->fk_unit, $line->multicurrency_subprice);
$this->updateline($line->id, $line->desc, $line->subprice, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, $line->qty, $line->fk_product, 'HT', $line->info_bits, $line->product_type, $line->remise_percent, false, $line->date_start, $line->date_end, $line->array_options, $line->fk_unit, $line->multicurrency_subprice);
break;
default:
dol_syslog(get_class($this).'::setMulticurrencyRate no updateline defined', LOG_DEBUG);
@@ -2223,6 +2239,8 @@ abstract class CommonObject
$error=0;
$multicurrency_tx = !empty($this->multicurrency_tx) ? $this->multicurrency_tx : 1;
// Define constants to find lines to sum
$fieldtva='total_tva';
$fieldlocaltax1='total_localtax1';
@@ -2275,7 +2293,6 @@ abstract class CommonObject
$obj = $this->db->fetch_object($resql);
// Note: There is no check on detail line and no check on total, if $forcedroundingmode = 'none'
$multicurrency_tx = !empty($this->multicurrency_tx) ? $this->multicurrency_tx : 1;
if ($forcedroundingmode == '0') // Check if data on line are consistent. This may solve lines that were not consistent because set with $forcedroundingmode='auto'
{
$localtax_array=array($obj->localtax1_type,$obj->localtax1_tx,$obj->localtax2_type,$obj->localtax2_tx);
@@ -2293,11 +2310,14 @@ abstract class CommonObject
}
}
$this->total_ht += $obj->total_ht; // The only field visible at end of line detail
$this->total_ht += $obj->total_ht; // The field visible at end of line detail
$this->total_tva += $obj->total_tva;
$this->total_localtax1 += $obj->total_localtax1;
$this->total_localtax2 += $obj->total_localtax2;
$this->total_ttc += $obj->total_ttc;
$this->multicurrency_total_ht += $obj->multicurrency_total_ht; // The field visible at end of line detail
$this->multicurrency_total_tva += $obj->multicurrency_total_tva;
$this->multicurrency_total_ttc += $obj->multicurrency_total_ttc;
if (! isset($total_ht_by_vats[$obj->vatrate])) $total_ht_by_vats[$obj->vatrate]=0;
if (! isset($total_tva_by_vats[$obj->vatrate])) $total_tva_by_vats[$obj->vatrate]=0;
@@ -2306,7 +2326,7 @@ abstract class CommonObject
$total_tva_by_vats[$obj->vatrate] += $obj->total_tva;
$total_ttc_by_vats[$obj->vatrate] += $obj->total_ttc;
if ($forcedroundingmode == '1') // Check if we need adjustement onto line for vat
if ($forcedroundingmode == '1') // Check if we need adjustement onto line for vat. TODO This works on the company currency but not on multicurrency
{
$tmpvat=price2num($total_ht_by_vats[$obj->vatrate] * $obj->vatrate / 100, 'MT', 1);
$diff=price2num($total_tva_by_vats[$obj->vatrate]-$tmpvat, 'MT', 1);
@@ -2330,26 +2350,25 @@ abstract class CommonObject
}
// Add revenue stamp to total
$this->total_ttc += isset($this->revenuestamp)?$this->revenuestamp:0;
$this->total_ttc += isset($this->revenuestamp)?$this->revenuestamp:0;
$this->multicurrency_total_ttc += isset($this->revenuestamp)?($this->revenuestamp * $multicurrency_tx):0;
// Situations totals
if ($this->situation_cycle_ref && $this->situation_counter > 1) {
if ($this->situation_cycle_ref && $this->situation_counter > 1 && method_exists($this, 'get_prev_sits')) {
$prev_sits = $this->get_prev_sits();
foreach ($prev_sits as $sit) {
foreach ($prev_sits as $sit) { // $sit is an object Facture loaded with a fetch.
$this->total_ht -= $sit->total_ht;
$this->total_tva -= $sit->total_tva;
$this->total_localtax1 -= $sit->total_localtax1;
$this->total_localtax2 -= $sit->total_localtax2;
$this->total_ttc -= $sit->total_ttc;
$this->multicurrency_total_ht -= $sit->multicurrency_total_ht;
$this->multicurrency_total_tva -= $sit->multicurrency_total_tva;
$this->multicurrency_total_ttc -= $sit->multicurrency_total_ttc;
}
}
// Multicurrency
$this->multicurrency_total_ht += $this->total_ht * $multicurrency_tx;
$this->multicurrency_total_tva += $this->total_tva * $multicurrency_tx;
$this->multicurrency_total_ttc += $this->total_ttc * $multicurrency_tx;
$this->db->free($resql);
// Now update global field total_ht, total_ttc and tva
@@ -2363,7 +2382,7 @@ abstract class CommonObject
if ($this->element == 'facture_fourn' || $this->element == 'invoice_supplier') $fieldtva='total_tva';
if ($this->element == 'propal') $fieldttc='total';
if ($this->element == 'expensereport') $fieldtva='total_tva';
if ($this->element == 'supplier_proposal') $fieldttc='total';
if ($this->element == 'supplier_proposal') $fieldttc='total';
if (empty($nodatabaseupdate))
{
@@ -3931,7 +3950,7 @@ abstract class CommonObject
// Now we add first model found in directories scanned
$listofdir=explode(',',$dirtoscan);
foreach($listofdir as $key=>$tmpdir)
foreach($listofdir as $key => $tmpdir)
{
$tmpdir=trim($tmpdir);
$tmpdir=preg_replace('/DOL_DATA_ROOT/',DOL_DATA_ROOT,$tmpdir);

View File

@@ -88,6 +88,7 @@ class Conf
$this->user = new stdClass();
$this->syslog = new stdClass();
$this->browser = new stdClass();
$this->medias = new stdClass();
$this->multicompany = new stdClass();
//! Charset for HTML output and for storing data in memory
@@ -328,6 +329,10 @@ class Conf
$this->propal->dir_output=$rootfordata."/propale";
$this->propal->dir_temp=$rootfordata."/propale/temp";
// For medias storage
$this->medias->multidir_output = array($this->entity => $rootfordata."/medias");
$this->medias->multidir_temp = array($this->entity => $rootfordata."/medias/temp");
// Exception: Some dir are not the name of module. So we keep exception here
// for backward compatibility.
@@ -489,8 +494,8 @@ class Conf
// By default, we propagate contacts
if (! isset($this->global->MAIN_PROPAGATE_CONTACTS_FROM_ORIGIN)) $this->global->MAIN_PROPAGATE_CONTACTS_FROM_ORIGIN='*'; // Can be also '*' or '^(BILLING|SHIPPING|CUSTOMER|.*)$' (regex not yet implemented)
// By default, we use the zip town autofill
if (! isset($this->global->MAIN_USE_ZIPTOWN_DICTIONNARY)) $this->global->MAIN_USE_ZIPTOWN_DICTIONNARY=1;
// By default, we do not use the zip town autofill
if (! isset($this->global->MAIN_USE_ZIPTOWN_DICTIONNARY)) $this->global->MAIN_USE_ZIPTOWN_DICTIONNARY=0;
// Define list of limited modules (value must be key found for "name" property of module, so for example 'supplierproposal' for Module "Supplier Proposal"
if (! isset($this->global->MAIN_MODULES_FOR_EXTERNAL)) $this->global->MAIN_MODULES_FOR_EXTERNAL='user,societe,propal,commande,facture,categorie,supplierproposal,fournisseur,contact,projet,contrat,ficheinter,expedition,agenda,resource,adherent'; // '' means 'all'. Note that contact is added here as it should be a module later.

View File

@@ -2207,10 +2207,6 @@ class Form
unset($producttmpselect);
}
if (!empty($conf->global->SUPPLIER_ORDER_WITH_NOPRICEDEFINED))
{
print '<input type="hidden" id="idprod" name="idprod" value="0" />';
}
// mode=2 means suppliers products
$urloption=($socid > 0?'socid='.$socid.'&':'').'htmlname='.$htmlname.'&outjson=1&price_level='.$price_level.'&type='.$filtertype.'&mode=2&status='.$status.'&finished='.$finished.'&alsoproductwithnosupplierprice='.$alsoproductwithnosupplierprice;
print ajax_autocompleter($selected, $htmlname, DOL_URL_ROOT.'/product/ajax/products.php', $urloption, $conf->global->PRODUIT_USE_SEARCH_TO_SELECT, 0, $ajaxoptions);
@@ -2218,11 +2214,6 @@ class Form
}
else
{
if (!empty($conf->global->SUPPLIER_ORDER_WITH_NOPRICEDEFINED))
{
print '<input type="hidden" id="idprod" name="idprod" value="0" />';
print '<script type="text/javascript">$("#'.$htmlname.'").change(function() { $("#idprod").val($(this).val());});</script>';
}
print $this->select_produits_fournisseurs_list($socid,$selected,$htmlname,$filtertype,$filtre,'',-1,0,0,$alsoproductwithnosupplierprice);
}
}
@@ -4332,7 +4323,7 @@ class Form
* Si vendeur et acheteur dans Communauté européenne et acheteur= entreprise alors TVA par défaut=0. Fin de règle.
* Sinon la TVA proposee par defaut=0. Fin de regle.
* @param bool $options_only Return HTML options lines only (for ajax treatment)
* @param int $mode 1=Add code into key in select list
* @param int $mode 0=Use vat rate as key in combo list, 1=Add VAT code after vat rate into key, -1=Use id of vat line as key
* @return string
*/
function load_tva($htmlname='tauxtva', $selectedrate='', $societe_vendeuse='', $societe_acheteuse='', $idprod=0, $info_bits=0, $type='', $options_only=false, $mode=0)
@@ -5458,6 +5449,14 @@ class Form
{
$listofidcompanytoscan=$object->thirdparty->id;
if (($object->thirdparty->parent > 0) && ! empty($conf->global->THIRDPARTY_INCLUDE_PARENT_IN_LINKTO)) $listofidcompanytoscan.=','.$object->thirdparty->parent;
if (($object->fk_project > 0) && ! empty($conf->global->THIRDPARTY_INCLUDE_PROJECT_THIRDPARY_IN_LINKTO))
{
include_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
$tmpproject=new Project($this->db);
$tmpproject->fetch($object->fk_project);
if ($tmpproject->socid > 0 && ($tmpproject->socid != $object->thirdparty->id)) $listofidcompanytoscan.=','.$tmpproject->socid;
unset($tmpproject);
}
$possiblelinks=array(
'propal'=>array('enabled'=>$conf->propal->enabled, 'perms'=>1, 'label'=>'LinkToProposal', 'sql'=>"SELECT s.rowid as socid, s.nom as name, s.client, t.rowid, t.ref, t.ref_client, t.total_ht FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."propal as t WHERE t.fk_soc = s.rowid AND t.fk_soc IN (".$listofidcompanytoscan.') AND t.entity IN ('.getEntity('propal',1).')'),

View File

@@ -498,7 +498,7 @@ class FormFile
$modellist=ModelePDFCards::liste_modeles($this->db);
}
}
elseif ($modulepart == 'agenda')
elseif ($modulepart == 'agenda' || $modulepart == 'actions')
{
if (is_array($genallowed)) $modellist=$genallowed;
else

View File

@@ -1062,7 +1062,7 @@ class FormOther
async: false
});
// We force reload to be sure to get all boxes into list
window.location.search=\'mainmenu='.GETPOST("mainmenu").'&leftmenu='.GETPOST('leftmenu').'&action=delbox\';
window.location.search=\'mainmenu='.GETPOST("mainmenu","aZ09").'&leftmenu='.GETPOST('leftmenu',"aZ09").'&action=delbox\';
}
else
{
@@ -1084,7 +1084,7 @@ class FormOther
url: \''.DOL_URL_ROOT.'/core/ajax/box.php?boxorder=\'+boxorder+\'&boxid=\'+boxid+\'&zone='.$areacode.'&userid='.$user->id.'\',
async: false
});
window.location.search=\'mainmenu='.GETPOST("mainmenu").'&leftmenu='.GETPOST('leftmenu').'&action=addbox&boxid=\'+boxid;
window.location.search=\'mainmenu='.GETPOST("mainmenu","aZ09").'&leftmenu='.GETPOST('leftmenu',"aZ09").'&action=addbox&boxid=\'+boxid;
}
});';
if (! count($arrayboxtoactivatelabel)) $selectboxlist.='jQuery("#boxcombo").hide();';

View File

@@ -1196,6 +1196,8 @@ class SMTPs
*/
function getHeader()
{
global $conf;
$_header = 'From: ' . $this->getFrom('org') . "\r\n"
. 'To: ' . $this->getTO() . "\r\n";
@@ -1258,6 +1260,7 @@ class SMTPs
$_header .= "Reply-To: ".$this->getReplyTo('addr') ."\r\n";
$_header .= 'X-Mailer: Dolibarr version ' . DOL_VERSION .' (using SMTPs Mailer)' . "\r\n";
$_header .= 'X-Dolibarr-Option: '.($conf->global->MAIN_MAIL_USE_MULTI_PART?'MAIN_MAIL_USE_MULTI_PART':'No MAIN_MAIL_USE_MULTI_PART') . "\r\n";
$_header .= 'Mime-Version: 1.0' . "\r\n";

View File

@@ -146,7 +146,7 @@ function run_sql($sqlfile,$silent=1,$entity='',$usesavepoint=1,$handler='',$oker
$buf = fgets($fp, 4096);
// Test if request must be ran only for particular database or version (if yes, we must remove the -- comment)
if (preg_match('/^--\sV(MYSQL|PGSQL|)([0-9\.]+)/i',$buf,$reg))
if (preg_match('/^--\sV(MYSQL|PGSQL)([^\s]*)/i',$buf,$reg))
{
$qualified=1;
@@ -159,20 +159,29 @@ function run_sql($sqlfile,$silent=1,$entity='',$usesavepoint=1,$handler='',$oker
// restrict on version
if ($qualified)
{
$versionrequest=explode('.',$reg[2]);
//print var_dump($versionrequest);
//print var_dump($versionarray);
if (! count($versionrequest) || ! count($versionarray) || versioncompare($versionrequest,$versionarray) > 0)
{
$qualified=0;
}
if (! empty($reg[2]))
{
if (is_numeric($reg[2])) // This is a version
{
$versionrequest=explode('.',$reg[2]);
//print var_dump($versionrequest);
//print var_dump($versionarray);
if (! count($versionrequest) || ! count($versionarray) || versioncompare($versionrequest,$versionarray) > 0)
{
$qualified=0;
}
}
else // This is a test on a constant. For example when we have -- VMYSQLUTF8UNICODE, we test constant $conf->global->UTF8UNICODE
{
if (empty($conf->db->dolibarr_main_db_collation) || ($reg[2] != strtoupper(preg_replace('/_/', '', $conf->db->dolibarr_main_db_collation)))) $qualified=0;
}
}
}
if ($qualified)
{
// Version qualified, delete SQL comments
$buf=preg_replace('/^--\sV(MYSQL|PGSQL|)([0-9\.]+)/i','',$buf);
$buf=preg_replace('/^--\sV(MYSQL|PGSQL)([^\s]*)/i','',$buf);
//print "Ligne $i qualifi?e par version: ".$buf.'<br>';
}
}

View File

@@ -40,6 +40,7 @@
* Ex: array('disabled'=>
* Ex: array('show'=>
* Ex: array('update_textarea'=>
* Ex: array('option_disabled'=> id to disable and warning to show if we select a disabled value (this is possible when using autocomplete ajax)
* @return string Script
*/
function ajax_autocompleter($selected, $htmlname, $url, $urloption='', $minLength=2, $autoselect=0, $ajaxoptions=array())
@@ -140,6 +141,7 @@ function ajax_autocompleter($selected, $htmlname, $url, $urloption='', $minLengt
$("#'.$htmlname.'").val(ui.item.id).trigger("change"); // Select new value
// Disable an element
if (options.option_disabled) {
console.log("Make action option_disabled on #"+options.option_disabled+" with disabled="+ui.item.disabled)
if (ui.item.disabled) {
$("#" + options.option_disabled).prop("disabled", true);
if (options.error) {
@@ -148,28 +150,32 @@ function ajax_autocompleter($selected, $htmlname, $url, $urloption='', $minLengt
if (options.warning) {
$.jnotify(options.warning, "warning", false); // Output with jnotify the warning message
}
} else {
} else {
$("#" + options.option_disabled).removeAttr("disabled");
}
}
if (options.disabled) {
console.log("Make action disabled on each "+options.option_disabled)
$.each(options.disabled, function(key, value) {
$("#" + value).prop("disabled", true);
});
}
if (options.show) {
console.log("Make action show on each "+options.show)
$.each(options.show, function(key, value) {
$("#" + value).show().trigger("show");
});
}
// Update an input
if (ui.item.update) {
console.log("Make action update on each ui.item.update")
// loop on each "update" fields
$.each(ui.item.update, function(key, value) {
$("#" + key).val(value).trigger("change");
});
}
if (ui.item.textarea) {
console.log("Make action textarea on each ui.item.textarea")
$.each(ui.item.textarea, function(key, value) {
if (typeof CKEDITOR == "object" && typeof CKEDITOR.instances != "undefined" && CKEDITOR.instances[key] != "undefined") {
CKEDITOR.instances[key].setData(value);

View File

@@ -1275,10 +1275,10 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint=
else $out.='-'.dol_print_date($histo[$key]['dateend'],'dayhour');
}
$late=0;
if ($histo[$key]['percent'] == 0 && $histo[$key]['datestart'] && $db->jdate($histo[$key]['datestart']) < ($now - $delay_warning)) $late=1;
if ($histo[$key]['percent'] == 0 && ! $histo[$key]['datestart'] && $histo[$key]['dateend'] && $db->jdate($histo[$key]['datestart']) < ($now - $delay_warning)) $late=1;
if ($histo[$key]['percent'] > 0 && $histo[$key]['percent'] < 100 && $histo[$key]['dateend'] && $db->jdate($histo[$key]['dateend']) < ($now - $delay_warning)) $late=1;
if ($histo[$key]['percent'] > 0 && $histo[$key]['percent'] < 100 && ! $histo[$key]['dateend'] && $histo[$key]['datestart'] && $db->jdate($histo[$key]['datestart']) < ($now - $delay_warning)) $late=1;
if ($histo[$key]['percent'] == 0 && $histo[$key]['datestart'] && $histo[$key]['datestart'] < ($now - $delay_warning)) $late=1;
if ($histo[$key]['percent'] == 0 && ! $histo[$key]['datestart'] && $histo[$key]['dateend'] && $histo[$key]['datestart'] < ($now - $delay_warning)) $late=1;
if ($histo[$key]['percent'] > 0 && $histo[$key]['percent'] < 100 && $histo[$key]['dateend'] && $histo[$key]['dateend'] < ($now - $delay_warning)) $late=1;
if ($histo[$key]['percent'] > 0 && $histo[$key]['percent'] < 100 && ! $histo[$key]['dateend'] && $histo[$key]['datestart'] && $histo[$key]['datestart'] < ($now - $delay_warning)) $late=1;
if ($late) $out.=img_warning($langs->trans("Late")).' ';
$out.="</td>\n";

View File

@@ -2,6 +2,7 @@
/* Copyright (C) 2004-2011 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2005-2011 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2011-2015 Juanjo Menent <jmenent@2byte.es>
* Copyright (C) 2017 Ferran Marcet <fmarcet@2byte.es>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -419,7 +420,7 @@ function dol_get_next_week($day, $week, $month, $year)
{
$tmparray = dol_get_first_day_week($day, $month, $year);
$time=dol_mktime(12,0,0,$month,$tmparray['first_day'],$year,1,0);
$time=dol_mktime(12,0,0,$tmparray['first_month'],$tmparray['first_day'],$tmparray['first_year'],1,0);
$time+=24*60*60*7;
$tmparray=dol_getdate($time,true);

View File

@@ -323,6 +323,7 @@ function dol_dir_is_emtpy($folder)
*
* @param string $file Filename
* @return int <0 if KO, Number of lines in files if OK
* @see dol_nboflines
*/
function dol_count_nb_of_line($file)
{
@@ -634,9 +635,9 @@ function dol_move_uploaded_file($src_file, $dest_file, $allowoverwrite, $disable
}
}
// Security:
// Disallow file with some extensions. We renamed them.
// Car si on a mis le rep documents dans un rep de la racine web (pas bien), cela permet d'executer du code a la demande.
// Security:
// Disallow file with some extensions. We rename them.
// Because if we put the documents directory into a directory inside web root (very bad), this allows to execute on demand arbitrary code.
if (preg_match('/\.htm|\.html|\.php|\.pl|\.cgi$/i',$dest_file) && empty($conf->global->MAIN_DOCUMENT_IS_OUTSIDE_WEBROOT_SO_NOEXE_NOT_REQUIRED))
{
$file_name.= '.noexe';
@@ -1856,7 +1857,7 @@ function dol_check_secure_access_document($modulepart,$original_file,$entity,$fu
elseif ($modulepart == 'medias' && !empty($dolibarr_main_data_root))
{
$accessallowed=1;
$original_file=$dolibarr_main_data_root.'/medias/'.$original_file;
$original_file=$conf->medias->multidir_output[$entity].'/'.$original_file;
}
// Wrapping for backups

View File

@@ -1,13 +1,13 @@
<?php
/* Copyright (C) 2000-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2003 Jean-Louis Bergamo <jlb@j1b.org>
* Copyright (C) 2004-2013 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2004-2018 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2004 Sebastien Di Cintio <sdicintio@ressource-toi.org>
* Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be>
* Copyright (C) 2004 Christophe Combelles <ccomb@free.fr>
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@capnetworks.com>
* Copyright (C) 2008 Raphael Bertrand (Resultic) <raphael.bertrand@resultic.fr>
* Copyright (C) 2010-2016 Juanjo Menent <jmenent@2byte.es>
* Copyright (C) 2010-2018 Juanjo Menent <jmenent@2byte.es>
* Copyright (C) 2013 Cédric Salvador <csalvador@gpcsolutions.fr>
* Copyright (C) 2013-2017 Alexandre Spangaro <aspangaro@zendsi.com>
* Copyright (C) 2014 Cédric GROSS <c.gross@kreiz-it.fr>
@@ -289,9 +289,6 @@ function GETPOST($paramname,$check='',$method=0,$filter=NULL,$options=NULL)
case 'intcomma':
if (preg_match('/[^0-9,]+/i',$out)) $out='';
break;
case 'intcomma':
if (preg_match('/[^0-9,]+/i',$out)) $out='';
break;
case 'alpha':
$out=trim($out);
// '"' is dangerous because param in url can close the href= or src= and add javascript functions.
@@ -2246,12 +2243,12 @@ function dol_print_graph($htmlid,$width,$height,$data,$showlegend=0,$type='pie',
* MAIN_DISABLE_TRUNC=1 can disable all truncings
*
* @param string $string String to truncate
* @param int $size Max string size visible. 0 for no limit. Final string size can be 1 more (if size was max+1) or 3 more (if we added ...)
* @param int $size Max string size visible (excluding ...). 0 for no limit. WARNING: Final string size can have 3 more chars (if we added ..., or if size was max+1 or max+2 or max+3 so it does not worse to replace with ...)
* @param string $trunc Where to trunc: right, left, middle (size must be a 2 power), wrap
* @param string $stringencoding Tell what is source string encoding
* @param int $nodot Truncation do not add ... after truncation. So it's an exact truncation.
* @param int $display Trunc is use to display and can be changed for small screen. TODO Remove this param (must be dealt with CSS)
* @return string Truncated string
* @return string Truncated string. WARNING: length is never higher than $size if $nodot is set, but can be 3 chars higher otherwise.
*/
function dol_trunc($string,$size=40,$trunc='right',$stringencoding='UTF-8',$nodot=0, $display=0)
{
@@ -2267,9 +2264,10 @@ function dol_trunc($string,$size=40,$trunc='right',$stringencoding='UTF-8',$nodo
if ($trunc == 'right')
{
$newstring=dol_textishtml($string)?dol_string_nohtmltag($string,1):$string;
if (dol_strlen($newstring,$stringencoding) > ($size+($nodot?0:1)))
if (dol_strlen($newstring,$stringencoding) > ($size+($nodot?0:3))) // If nodot is 0 and size is 1,2 or 3 chars more, we don't trunc and don't add ...
return dol_substr($newstring,0,$size,$stringencoding).($nodot?'':'...');
else
//return 'u'.$size.'-'.$newstring.'-'.dol_strlen($newstring,$stringencoding).'-'.$string;
return $string;
}
elseif ($trunc == 'middle')
@@ -2287,7 +2285,7 @@ function dol_trunc($string,$size=40,$trunc='right',$stringencoding='UTF-8',$nodo
elseif ($trunc == 'left')
{
$newstring=dol_textishtml($string)?dol_string_nohtmltag($string,1):$string;
if (dol_strlen($newstring,$stringencoding) > ($size+1))
if (dol_strlen($newstring,$stringencoding) > ($size+($nodot?0:3))) // If nodot is 0 and size is 1,2 or 3 chars more, we don't trunc and don't add ...
return '...'.dol_substr($newstring,dol_strlen($newstring,$stringencoding) - $size,$size,$stringencoding);
else
return $string;
@@ -2327,7 +2325,7 @@ function img_picto($titlealt, $picto, $morealt = '', $pictoisfullpath = false, $
if ($pictoisfullpath)
{
// Clean parameters
if (! preg_match('/(\.png|\.gif)$/i',$picto)) $picto .= '.png';
if (! preg_match('/(\.png|\.gif|\.svg)$/i',$picto)) $picto .= '.png';
$fullpathpicto = $picto;
}
else
@@ -2348,7 +2346,7 @@ function img_picto($titlealt, $picto, $morealt = '', $pictoisfullpath = false, $
$path = $regs[2]; // $path is $mymodule
}
// Clean parameters
if (! preg_match('/(\.png|\.gif)$/i',$picto)) $picto .= '.png';
if (! preg_match('/(\.png|\.gif|\.svg)$/i',$picto)) $picto .= '.png';
// If alt path are defined, define url where img file is, according to physical path
foreach ($conf->file->dol_document_root as $type => $dirroot) // ex: array(["main"]=>"/home/maindir/htdocs", ["alt0"]=>"/home/moddir0/htdocs", ...)
{
@@ -2931,8 +2929,8 @@ function dol_print_error($db='',$error='',$errors=null)
$out.="<b>".$langs->trans("Referer").":</b> ".(isset($_SERVER["HTTP_REFERER"])?dol_htmlentities($_SERVER["HTTP_REFERER"],ENT_COMPAT,'UTF-8'):'')."<br>\n";
$out.="<b>".$langs->trans("MenuManager").":</b> ".(isset($conf->standard_menu)?$conf->standard_menu:'')."<br>\n";
$out.="<br>\n";
$syslog.="url=".$_SERVER["REQUEST_URI"];
$syslog.=", query_string=".$_SERVER["QUERY_STRING"];
$syslog.="url=".dol_escape_htmltag($_SERVER["REQUEST_URI"]);
$syslog.=", query_string=".dol_escape_htmltag($_SERVER["QUERY_STRING"]);
}
else // Mode CLI
{
@@ -3770,10 +3768,14 @@ function get_localtax($vatrate, $local, $thirdparty_buyer="", $thirdparty_seller
}
else // i am the seller
{
if (!isOnlyOneLocalTax($local)) // This is for spain only, we don't return value found into datbase even if there is only one locatax vat.
{
return $conf->global->MAIN_INFO_VALUE_LOCALTAX2;
}
if (in_array($mysoc->country_code, array('ES')))
{
return $thirdparty_buyer->localtax2_value;
}
else
{
return $conf->global->MAIN_INFO_VALUE_LOCALTAX2;
}
}
}
}
@@ -3894,7 +3896,7 @@ function getTaxesFromId($vatrowid)
* @param Societe $buyer Company object
* @param Societe $seller Company object
* @param int $firstparamisid 1 if first param is id into table (use this if you can)
* @return array array(localtax_type1(1-6 / 0 if not found), rate of localtax1, ...)
* @return array array(localtax_type1(1-6/0 if not found), rate localtax1, localtax_type2, rate localtax2, accountancycodecust, accountancycodesupp)
*/
function getLocalTaxesFromRate($vatrate, $local, $buyer, $seller, $firstparamisid=0)
{
@@ -3928,50 +3930,16 @@ function getLocalTaxesFromRate($vatrate, $local, $buyer, $seller, $firstparamisi
$obj = $db->fetch_object($resql);
if ($local == 1)
{
if (! isOnlyOneLocalTax(1))
{
return array($obj->localtax1_type, get_localtax($vatrate, $local, $buyer, $seller), $obj->accountancy_code_sell,$obj->accountancy_code_buy);
}
else
{
return array($obj->localtax1_type, $obj->localtax1,$obj->accountancy_code_sell,$obj->accountancy_code_buy);
}
return array($obj->localtax1_type, get_localtax($vatrate, $local, $buyer, $seller), $obj->accountancy_code_sell, $obj->accountancy_code_buy);
}
elseif ($local == 2)
{
if (! isOnlyOneLocalTax(2))
{
return array($obj->localtax2_type, get_localtax($vatrate, $local, $buyer, $seller),$obj->accountancy_code_sell,$obj->accountancy_code_buy);
}
else
{
return array($obj->localtax2_type, $obj->localtax2,$obj->accountancy_code_sell,$obj->accountancy_code_buy);
}
return array($obj->localtax2_type, get_localtax($vatrate, $local, $buyer, $seller),$obj->accountancy_code_sell, $obj->accountancy_code_buy);
}
else
{
if(! isOnlyOneLocalTax(1))
{
if(! isOnlyOneLocalTax(2))
{
return array($obj->localtax1_type, get_localtax($vatrate, 1, $buyer, $seller), $obj->localtax2_type, get_localtax($vatrate, 2, $buyer, $seller),$obj->accountancy_code_sell,$obj->accountancy_code_buy);
}
else
{
return array($obj->localtax1_type, get_localtax($vatrate, 1, $buyer, $seller), $obj->localtax2_type, $obj->localtax2,$obj->accountancy_code_sell,$obj->accountancy_code_buy);
}
}
else
{
if(! isOnlyOneLocalTax(2))
{
return array($obj->localtax1_type, $obj->localtax1, $obj->localtax2_type,get_localtax($vatrate, 2, $buyer, $seller) ,$obj->accountancy_code_sell,$obj->accountancy_code_buy);
}
else
{
return array($obj->localtax1_type, $obj->localtax1, $obj->localtax2_type, $obj->localtax2,$obj->accountancy_code_sell,$obj->accountancy_code_buy);
}
}
return array($obj->localtax1_type, get_localtax($vatrate, 1, $buyer, $seller), $obj->localtax2_type, get_localtax($vatrate, 2, $buyer, $seller), $obj->accountancy_code_sell,$obj->accountancy_code_buy);
}
}
@@ -4490,22 +4458,57 @@ function dol_string_nohtmltag($StringHtml,$removelinefeed=1,$pagecodeto='UTF-8')
* Return first line of text. Cut will depends if content is HTML or not.
*
* @param string $text Input text
* @param int $nboflines Nb of lines to get (default is 1 = first line only)
* @return string Output text
* @see dol_nboflines_bis, dol_string_nohtmltag, dol_escape_htmltag
*/
function dolGetFirstLineOfText($text)
function dolGetFirstLineOfText($text, $nboflines=1)
{
if (dol_textishtml($text))
if ($nboflines == 1)
{
$firstline=preg_replace('/<br[^>]*>.*$/s','',$text); // The s pattern modifier means the . can match newline characters
$firstline=preg_replace('/<div[^>]*>.*$/s','',$firstline); // The s pattern modifier means the . can match newline characters
if (dol_textishtml($text))
{
$firstline=preg_replace('/<br[^>]*>.*$/s','',$text); // The s pattern modifier means the . can match newline characters
$firstline=preg_replace('/<div[^>]*>.*$/s','',$firstline); // The s pattern modifier means the . can match newline characters
}
else
{
$firstline=preg_replace('/[\n\r].*/','',$text);
}
return $firstline.((strlen($firstline) != strlen($text))?'...':'');
}
else
{
$firstline=preg_replace('/[\n\r].*/','',$text);
$ishtml=0;
if (dol_textishtml($text))
{
$text=preg_replace('/\n/','',$text);
$ishtml=1;
$repTable = array("\t" => " ", "\n" => " ", "\r" => " ", "\0" => " ", "\x0B" => " ");
}
else
{
$repTable = array("\t" => " ", "\n" => "<br>", "\r" => " ", "\0" => " ", "\x0B" => " ");
}
$text = strtr($text, $repTable);
if ($charset == 'UTF-8') { $pattern = '/(<br[^>]*>)/Uu'; } // /U is to have UNGREEDY regex to limit to one html tag. /u is for UTF8 support
else $pattern = '/(<br[^>]*>)/U'; // /U is to have UNGREEDY regex to limit to one html tag.
$a = preg_split($pattern, $text, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
$firstline='';
$i=0;
$nba = count($a); // 2x nb of lines in $a because $a contains also a line for each new line separator
while (($i < $nba) && ($i < ($nboflines * 2)))
{
if ($i % 2 == 0) $firstline .= $a[$i];
elseif (($i < (($nboflines * 2) - 1)) && ($i < ($nba - 1))) $firstline .= ($ishtml?"<br>\n":"\n");
$i++;
}
unset($a);
return $firstline.(($i < $nba)?'...':'');
}
return $firstline.((strlen($firstline) != strlen($text))?'...':'');
}
@@ -4667,7 +4670,7 @@ function dol_nboflines($s,$maxchar=0)
/**
* Return nb of lines of a formated text with \n and <br> (we can't have both \n and br)
* Return nb of lines of a formated text with \n and <br> (WARNING: string must not have mixed \n and br separators)
*
* @param string $text Text
* @param int $maxlinesize Largeur de ligne en caracteres (ou 0 si pas de limite - defaut)
@@ -4703,6 +4706,8 @@ function dol_nboflines_bis($text,$maxlinesize=0,$charset='UTF-8')
}
}
}
unset($a);
return $nblines;
}
@@ -5774,29 +5779,39 @@ function natural_search($fields, $value, $mode=0, $nofirstand=0)
$i3 = 0;
foreach($tmpcrits as $tmpcrit)
{
$newres .= (($i2 > 0 || $i3 > 0) ? ' OR ' : '') . $field . " LIKE '";
$newres .= (($i2 > 0 || $i3 > 0) ? ' OR ' : '');
if (preg_match('/\.(id|rowid)$/', $field)) // Special cas for rowid that is sometimes a ref so used as a search field
{
$newres .= $field . " = " . (is_numeric(trim($tmpcrit))?trim($tmpcrit):'0');
}
else
{
$newres .= $field . " LIKE '";
$tmpcrit=trim($tmpcrit);
$tmpcrit2=$tmpcrit;
$tmpbefore='%'; $tmpafter='%';
if (preg_match('/^[\^\$]/', $tmpcrit))
{
$tmpbefore='';
$tmpcrit2 = preg_replace('/^[\^\$]/', '', $tmpcrit2);
}
if (preg_match('/[\^\$]$/', $tmpcrit))
{
$tmpafter='';
$tmpcrit2 = preg_replace('/[\^\$]$/', '', $tmpcrit2);
}
$newres .= $tmpbefore;
$newres .= $db->escape($tmpcrit2);
$newres .= $tmpafter;
$newres .= "'";
if (empty($tmpcrit2))
{
$newres .= ' OR ' . $field . " IS NULL";
}
}
$tmpcrit=trim($tmpcrit);
$tmpcrit2=$tmpcrit;
$tmpbefore='%'; $tmpafter='%';
if (preg_match('/^[\^\$]/', $tmpcrit))
{
$tmpbefore='';
$tmpcrit2 = preg_replace('/^[\^\$]/', '', $tmpcrit2);
}
if (preg_match('/[\^\$]$/', $tmpcrit))
{
$tmpafter='';
$tmpcrit2 = preg_replace('/[\^\$]$/', '', $tmpcrit2);
}
$newres .= $tmpbefore;
$newres .= $db->escape($tmpcrit2);
$newres .= $tmpafter;
$newres .= "'";
if (empty($tmpcrit2))
{
$newres .= ' OR ' . $field . " IS NULL";
}
$i3++;
}
$i2++; // a criteria was added to string

View File

@@ -42,19 +42,21 @@ if (! function_exists('json_encode'))
*
* @param mixed $elements PHP Object to json encode
* @return string Json encoded string
* @deprecated PHP >= 5.3 supports native json_encode
* @see json_encode()
*/
function dol_json_encode($elements)
{
dol_syslog('dol_json_encode() is deprecated. Please update your code to use native json_encode().', LOG_WARNING);
dol_syslog("For better permorfance, enable the native json in your PHP", LOG_WARNING);
$num=count($elements);
$num=0;
if (is_object($elements)) // Count number of properties for an object
{
$num=0;
foreach($elements as $key => $value) $num++;
}
else
{
$num=count($elements);
}
//var_dump($num);
// determine type

View File

@@ -1039,10 +1039,10 @@ function pdf_pagefoot(&$pdf,$outputlangs,$paramfreetext,$fromcompany,$marge_bass
// Show page nb only on iso languages (so default Helvetica font)
if (strtolower(pdf_getPDFFont($outputlangs)) == 'helvetica')
{
$pdf->SetXY(-20,-$posy);
$pdf->SetXY($dims['wk']-$dims['rm']-15, -$posy);
//print 'xxx'.$pdf->PageNo().'-'.$pdf->getAliasNbPages().'-'.$pdf->getAliasNumPage();exit;
if (empty($conf->global->MAIN_USE_FPDF)) $pdf->MultiCell(13, 2, $pdf->PageNo().'/'.$pdf->getAliasNbPages(), 0, 'R', 0);
else $pdf->MultiCell(13, 2, $pdf->PageNo().'/{nb}', 0, 'R', 0);
if (empty($conf->global->MAIN_USE_FPDF)) $pdf->MultiCell(15, 2, $pdf->PageNo().'/'.$pdf->getAliasNbPages(), 0, 'R', 0);
else $pdf->MultiCell(15, 2, $pdf->PageNo().'/{nb}', 0, 'R', 0);
}
return $marginwithfooter;
@@ -1753,6 +1753,8 @@ function pdf_getlineremisepercent($object,$i,$outputlangs,$hidedetails=0)
*/
function pdf_getlineprogress($object, $i, $outputlangs, $hidedetails = 0, $hookmanager = null)
{
if (empty($hookmanager)) global $hookmanager;
$reshook=0;
$result='';
//if (is_object($hookmanager) && ( (isset($object->lines[$i]->product_type) && $object->lines[$i]->product_type == 9 && ! empty($object->lines[$i]->special_code)) || ! empty($object->lines[$i]->fk_parent_line) ) )

View File

@@ -50,7 +50,7 @@
* @param array $localtaxes_array Array with localtaxes info array('0'=>type1,'1'=>rate1,'2'=>type2,'3'=>rate2) (loaded by getLocalTaxesFromRate(vatrate, 0, ...) function).
* @param integer $progress Situation invoices progress (value from 0 to 100, 100 by default)
* @param double $multicurrency_tx Currency rate (1 by default)
* @param double $pu_ht_devise Amount in currency
* @param double $pu_devise Amount in currency
* @return array [
* 0=total_ht,
* 1=total_vat, (main vat only)
@@ -65,15 +65,16 @@
* 10=total_tax2 for total_ht,
* 11=pu_tax1 for pu_ht, !! should not be used
* 12=pu_tax2 for pu_ht, !! should not be used
* 13=!! should not be used
* 13=?? !! should not be used
* 14=total_tax1 for total_ht_without_discount,
* 15=total_tax2 for total_ht_without_discount]
* 15=total_tax2 for total_ht_without_discount,
*
* 16=multicurrency_total_ht
* 17=multicurrency_total_tva
* 18=multicurrency_total_ttc
* 19=multicurrency_pu_ht
*/
function calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $uselocaltax1_rate, $uselocaltax2_rate, $remise_percent_global, $price_base_type, $info_bits, $type, $seller = '', $localtaxes_array='', $progress=100, $multicurrency_tx=1, $pu_ht_devise=0)
function calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $uselocaltax1_rate, $uselocaltax2_rate, $remise_percent_global, $price_base_type, $info_bits, $type, $seller = '', $localtaxes_array='', $progress=100, $multicurrency_tx=1, $pu_devise=0)
{
global $conf,$mysoc,$db;
@@ -145,10 +146,11 @@ function calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $uselocalt
}
// pu calculation from pu_devise if pu empty
if(empty($pu) && !empty($pu_ht_devise)) {
$pu = $pu_ht_devise / $multicurrency_tx;
} else {
$pu_ht_devise = $pu * $multicurrency_tx;
if(empty($pu) && !empty($pu_devise)) {
$pu = $pu_devise / $multicurrency_tx;
}
if(empty($pu_devise) && !empty($multicurrency_tx)) {
$pu_devise = $pu * $multicurrency_tx;
}
// initialize total (may be HT or TTC depending on price_base_type)
@@ -340,11 +342,45 @@ function calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $uselocalt
}
// Multicurrency
$result[16] = price2num($result[0] * $multicurrency_tx, 'MT');
$result[17] = price2num($result[1] * $multicurrency_tx, 'MT');
$result[18] = price2num($result[2] * $multicurrency_tx, 'MT');
$result[19] = price2num($pu_ht_devise, 'MU');
if ($multicurrency_tx != 1)
{
// Recal function using the multicurrency price as reference price. We must set param $multicurrency_tx to 1 to avoid infinite loop.
$newresult = calcul_price_total($qty, $pu_devise, $remise_percent_ligne, $txtva, $uselocaltax1_rate, $uselocaltax2_rate, $remise_percent_global, $price_base_type, $info_bits, $type, $seller, $localtaxes_array, $progress, 1, 0);
$result[16] = $newresult[0];
$result[17] = $newresult[1];
$result[18] = $newresult[2];
$result[19] = $newresult[3];
$result[20] = $newresult[4];
$result[21] = $newresult[5];
$result[22] = $newresult[6];
$result[23] = $newresult[7];
$result[24] = $newresult[8];
$result[25] = $newresult[9];
$result[26] = $newresult[10];
/*
$result[16] = price2num($result[0] * $multicurrency_tx, 'MT');
$result[17] = price2num($result[1] * $multicurrency_tx, 'MT');
$result[18] = price2num($result[2] * $multicurrency_tx, 'MT');
$result[19] = price2num($pu_devise, 'MU');
*/
}
else
{
$result[16] = $result[0];
$result[17] = $result[1];
$result[18] = $result[2];
$result[19] = $result[3];
$result[20] = $result[4];
$result[21] = $result[5];
$result[22] = $result[6];
$result[23] = $result[7];
$result[24] = $result[8];
$result[25] = $result[9];
$result[26] = $result[10];
}
//var_dump($result);
// initialize result array
//for ($i=0; $i <= 18; $i++) $result[$i] = (float) $result[$i];

Some files were not shown because too many files have changed in this diff Show More